parser.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #ifndef PARSER_H
  2. #define PARSER_H
  3. #include "stm.h"
  4. #include "toker.h"
  5. class Parser{
  6. Toker* toker;
  7. Block* block;
  8. bool pub_;
  9. Exp* primary;
  10. ExpSeq* fun_defaults;
  11. int default_call_conv;
  12. string loopLabel;
  13. int import_nest;
  14. int extern_nest;
  15. ModuleType *import_module;
  16. void fail( const char *fmt,... );
  17. int curr();
  18. int next();
  19. string text();
  20. bstring wtext();
  21. string parse( int n );
  22. bool cparse( int n );
  23. void exp( int n );
  24. void exp( string t );
  25. bool pub();
  26. int linkage();
  27. void emitDebugInfo();
  28. void emit( Stm *t,bool debugInfo );
  29. void decl( Decl *d );
  30. Type* parseLitType( Type *ty );
  31. Val* parseLitVal();
  32. CGExp *parseLitExp( Type *ty );
  33. string parseString();
  34. bstring parseBString();
  35. string parseIdent();
  36. string parseClassName();
  37. string parseModuleName();
  38. int parseCGType();
  39. CGLit* parseCGLit();
  40. CGExp* parseCGExp();
  41. Decl* parseImportDecl();
  42. void importFile( string file,ModuleType *mod );
  43. void importModule( string mod );
  44. void importSource( string src );
  45. void parseImport();
  46. int parseCallConv();
  47. void parseExtern();
  48. int arrayDeclDims( string t );
  49. Type* parseBaseType();
  50. FunType*parseFunType( Type *baseType );
  51. Type* parseType();
  52. RefType*parseRefType();
  53. Exp* parseCastExp( Type *base_ty );
  54. ArrayExp*parseArrayExp( Type *ty );
  55. Exp* parsePeekExp();
  56. Exp* parseIdentExp();
  57. Exp* parseArrayDataExp();
  58. Exp* parseNewExp();
  59. Exp* parsePriExp(); //Ident, Constant, Self, Super, New(?)
  60. Exp* parsePostExp( Exp *lhs=0 ); //Member, Extends, Invoke
  61. Exp* parsePreExp(); //Cast, Varptr, Peek, First, Last, Before, After
  62. Exp* parsePowExp(); //^
  63. Exp* parseFactExp(); //*, /, Mod, Shl, Shr, Sar
  64. Exp* parseTermExp(); //+, -
  65. Exp* parseCmpExp(); //<, =, >, <=, >=, <>
  66. Exp* parseShortCircExp(); //AndIf, OrIf
  67. Exp* parseBitwiseExp(); //And, Or, Xor
  68. Exp* parseExp();
  69. string parseMetaData();
  70. void addMetaData( const vector<Decl*> &decls );
  71. Decl* parseInitDecl( Exp **init );
  72. void parseLocalDecls();
  73. void parseGlobalDecls();
  74. void parseConstDecls();
  75. void parseFieldDecls();
  76. void parseTypeDecl();
  77. void parseFunDecl( int attr );
  78. void parseAccess();
  79. void parseModule();
  80. void parseLabelStm();
  81. void parseGotoStm();
  82. void parseFlushMemStm();
  83. void parseDataStm();
  84. void parseReadStm();
  85. void parseRestoreStm();
  86. void parseStm();
  87. void parseEndStm();
  88. void parseExpStm();
  89. void parseIfStm( int term );
  90. void parseLoopCtrlStm();
  91. void parseForStm();
  92. void parseWhileStm();
  93. void parseRepeatStm();
  94. void parseSelectStm();
  95. void parseReturnStm();
  96. void parseDeleteStm();
  97. void parsePokeStm();
  98. void parseAssertStm();
  99. void parseTryStm();
  100. void parseThrowStm();
  101. void includeFile( string file );
  102. void parseStms( Block *block,int term );
  103. public:
  104. Parser();
  105. void parse();
  106. };
  107. #endif