parser.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. The parser builds an abstact syntax tree from input tokens.
  3. */
  4. #ifndef PARSER_H
  5. #define PARSER_H
  6. #include "toker.h"
  7. #include "nodes.h"
  8. class Parser{
  9. public:
  10. Parser( Toker &t );
  11. ProgNode *parse( const string &main );
  12. private:
  13. string incfile;
  14. set<string> included;
  15. Toker *toker,*main_toker;
  16. map<string,DimNode*> arrayDecls;
  17. DeclSeqNode *consts;
  18. DeclSeqNode *structs;
  19. DeclSeqNode *funcs;
  20. DeclSeqNode *datas;
  21. StmtSeqNode *parseStmtSeq( int scope );
  22. void parseStmtSeq( StmtSeqNode *stmts,int scope );
  23. void ex( const string &s );
  24. void exp( const string &s );
  25. string parseIdent();
  26. void parseChar( int c );
  27. string parseTypeTag();
  28. VarNode *parseVar();
  29. VarNode *parseVar( const string &ident,const string &tag );
  30. CallNode *parseCall( const string &ident,const string &tag );
  31. IfNode *parseIf();
  32. DeclNode *parseVarDecl( int kind,bool constant );
  33. DimNode *parseArrayDecl();
  34. DeclNode *parseFuncDecl();
  35. DeclNode *parseStructDecl();
  36. ExprSeqNode *parseExprSeq();
  37. ExprNode *parseExpr( bool opt );
  38. ExprNode *parseExpr1( bool opt ); //And, Or, Eor
  39. ExprNode *parseExpr2( bool opt ); //<,=,>,<=,<>,>=
  40. ExprNode *parseExpr3( bool opt ); //+,-
  41. ExprNode *parseExpr4( bool opt ); //Lsr,Lsr,Asr
  42. ExprNode *parseExpr5( bool opt ); //*,/,Mod
  43. ExprNode *parseExpr6( bool opt ); //^
  44. ExprNode *parseUniExpr( bool opt ); //+,-,Not,~
  45. ExprNode *parsePrimary( bool opt );
  46. };
  47. #endif