__grammar.h 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #ifndef VIRTUALMATH___GRAMMAR_H
  2. #define VIRTUALMATH___GRAMMAR_H
  3. #include "__virtualmath.h"
  4. #define PASERSSIGNATURE ParserMessage *pm, Inter *inter /*pasers函数的统一签名*/
  5. #define CALLPASERSSIGNATURE pm, inter /*pasers函数调用的统一实参*/
  6. #if OUT_LOG && OUT_PASERS_LOG
  7. #define doubleLog(pm, grammar_level, pasers_level, message, ...) do{ \
  8. writeLog(pm->grammar_debug, grammar_level, message, __VA_ARGS__); \
  9. writeLog(pm->paser_debug, pasers_level, "\n"message, __VA_ARGS__); \
  10. } while(0)
  11. #else
  12. #define doubleLog(...) PASS
  13. #endif
  14. #if OUT_LOG && OUT_GRAMMER_LOG
  15. #define writeLog_(...) writeLog(__VA_ARGS__)
  16. #else
  17. #define writeLog_(...) PASS
  18. #endif
  19. #define addStatementToken(type, st, pm) addBackToken(pm->tm->ts, makeStatementToken(type, st), pm->paser_debug)
  20. #define delToken(pm) (freeToken(popAheadToken(pm), true, false))
  21. #define backToken_(pm, token) addBackToken(pm->tm->ts, (token), pm->paser_debug)
  22. #define addLexToken(pm, type) backToken_(pm, makeLexToken(type, NULL, NULL, 0))
  23. #define addToken_ backToken_
  24. #define call_success(pm) (pm->status == success)
  25. typedef void (*PasersFunction)(PASERSSIGNATURE);
  26. typedef int (*GetSymbolFunction)(PASERSSIGNATURE, int, Statement **);
  27. typedef Statement *(*MakeControlFunction)(Statement *, long int, char *);
  28. typedef int (*TailFunction)(PASERSSIGNATURE, Token *, Statement **);
  29. void parserCommand(PASERSSIGNATURE);
  30. void parserControl(PASERSSIGNATURE, MakeControlFunction callBack, int type, bool must_operation,
  31. char *message);
  32. void parserDef(PASERSSIGNATURE);
  33. void parserIf(PASERSSIGNATURE);
  34. void parserWhile(PASERSSIGNATURE);
  35. void parserTry(PASERSSIGNATURE);
  36. void parserCode(PASERSSIGNATURE);
  37. void parserOperation(PASERSSIGNATURE);
  38. void parserPolynomial(PASERSSIGNATURE);
  39. void parserBaseValue(PASERSSIGNATURE);
  40. void parserCallBack(PASERSSIGNATURE);
  41. void parserPoint(PASERSSIGNATURE);
  42. void parserFactor(PASERSSIGNATURE);
  43. void parserAssignment(PASERSSIGNATURE);
  44. void parserTuple(PASERSSIGNATURE);
  45. void parserImport(PASERSSIGNATURE);
  46. void syntaxError(ParserMessage *pm, int status,long int line , int num, ...);
  47. int readBackToken(ParserMessage *pm);
  48. Token *popAheadToken(ParserMessage *pm);
  49. bool checkToken(ParserMessage *pm, int type);
  50. bool commandCallControl_(PASERSSIGNATURE, MakeControlFunction callBack, int type, Statement **st,
  51. char *log_message, bool must_operation, char *error_message);
  52. bool commandCallBack_(PASERSSIGNATURE, PasersFunction callBack, int type, Statement **st, char *message);
  53. bool callParserCode(PASERSSIGNATURE, Statement **st, char *message, long int line);
  54. bool callParserAs(PASERSSIGNATURE, Statement **st,char *message);
  55. bool callChildStatement(PASERSSIGNATURE, PasersFunction callBack, int type, Statement **st, char *message);
  56. bool callChildToken(PASERSSIGNATURE, PasersFunction callBack, int type, Token **tmp, char *message,
  57. int error_type);
  58. bool parserParameter(PASERSSIGNATURE, Parameter **pt, bool is_formal, bool is_list, bool is_dict,
  59. int sep,int ass);
  60. void twoOperation(PASERSSIGNATURE, PasersFunction callBack, GetSymbolFunction getSymbol,
  61. int call_type, int self_type, char *call_name, char *self_name, bool is_right);
  62. void tailOperation(PASERSSIGNATURE, PasersFunction callBack, TailFunction tailFunction, int call_type, int self_type,
  63. char *call_name, char *self_name);
  64. #endif //VIRTUALMATH___GRAMMAR_H