__grammar.h 2.8 KB

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