⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lex.hpp

📁 FreeFem++可以生成高质量的有限元网格。可以用于流体力学
💻 HPP
字号:
// -*- Mode : c++ -*-//// SUMMARY  :      // USAGE    :        // ORG      : // AUTHOR   : Frederic Hecht// E-MAIL   : hecht@ann.jussieu.fr///*  This file is part of Freefem++  Freefem++ is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.  Freefem++  is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.  You should have received a copy of the GNU Lesser General Public License along with Freefem++; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */#ifndef MY_LEX_HPP_#define MY_LEX_HPP_// with New version of macro expansion more simple and more stable // FH jan 2005#include <stack> #include "environment.hpp"extern bool lexdebug;extern long mpisize,mpirank;class mylex : public CodeAlloc {   public:  typedef const char * Key;  typedef pair<int,aType> Value;  struct Keyless : binary_function<Key,Key, bool>   { bool operator()(const Key& x, const Key& y) const{ return strcmp(x,y)<0;} };    typedef   map<const char *,Value,Keyless> MapMotClef;  typedef   map<const char *, deque<string> ,Keyless >  MapMacroDef;  typedef   map<string, string  >  MapMacroParam;  typedef   MapMotClef::const_iterator const_iterator;  typedef   MapMotClef::iterator iterator;  public:   int linenumber,charnumber;  list<string> ffincludedir;  typedef  list<string>::iterator Iffincludedir;  typedef  list<string>::const_iterator ICffincludedir;    private:  bool firsttime;  int level;  char buf[1024];  int typetoken;  bool echo;  stack<char *> strdata;  struct xxxx {     int l;    istream * f;    const string * filename;     istream * nf;    xxxx() : l(0), f(0) , filename(0),nf(0)   {}       void  open(mylex *lexx,const char * ff) ;    void  readin(mylex *lexx,const string & s,const string *name=0);    void close() ;  };    friend struct mylex::xxxx;    xxxx pilesource[100];  istream & source() const {return  * pilesource[level].f;}   ostream & cout ;  MapMotClef  MotClef;  list<MapMacroDef> *listMacroDef;  list<MapMacroParam> *listMacroParam;  public:    mylex(ostream & out);  string token() const;  void print(ostream &f) const;   int scan(int lvl=0);  int lineno(){return linenumber;}  char * YYText() { return buf;}  void dump(ostream & f ) ;    void erreur(const char * s) {    cerr << " Error line number" <<linenumber << ": " << s << endl;    throw(ErrorCompile("lex:",linenumber)); }    bool InMotClef  (aType & t, int & r) const ;  void  Add(Key k,int r,aType t);    void Check(bool b,Key k,const char * s) {    if(b) {cout <<"Add " << s << "  null: " << k << endl;    CompileError();}}    void Add(Key k,int i) ;//    {Check(!i,k,"mot clef");Add(k,i,0); }  void Add(Key k,aType t);//   {Check(!t,k,"type");Add(k,TYPE,t); }  void AddF(Key k,aType t);//  {Check(!t,k,"type");Add(k,FUNCTION,t); }  void AddSpace(Key k,aType t);//  {Check(!t,k,"type");Add(k,FUNCTION,t); }  const char * filename() const {     if ( level >=0 )       return  pilesource[level].filename ? pilesource[level].filename->c_str() : " -- in macro -- ";    return "-- unkown --";}      void input(const char *  filename) ;  void input(const string &str,const string *name=0);  bool close() ;  char * newcopy(const char * s)   {    char *r(new char  [strlen(s)+1]);    strcpy(r, s);    strdata.push(r);    return r;  } ostream & ShowStack(ostream & f); ~mylex();private:   int basescan();    int EatCommentAndSpace(string *data=0);  int scan1();  bool SetMacro(int &ret);  bool CallMacro(int &ret);  char * match(int i);  void ErrorScan(const char * s) {      cerr  << "\n" ;      ShowStack(cerr);    throw(ErrorCompile(s,lineno(),YYText() ) );}        } ; mylex * Newlex(  ostream & out); void Destroylex(mylex * m);extern mylex *zzzfff;#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -