calc.g
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:1k
源码类别:

编译器/解释器

开发平台:

Others

  1. header {
  2. #include "PLUSNode.hpp"
  3. #include "MULTNode.hpp"
  4. #include "INTNode.hpp"
  5. }
  6. options {
  7. language = Cpp;
  8. }
  9. /** This example demonstrates the heterogeneous tree construction
  10.  *  mechanism.  Compare this example to examples/calc/calc.g
  11.  *  to see that I use tree node methods not a tree walker to compute
  12.  *  the result.
  13.  */
  14. class CalcParser extends Parser;
  15. options {
  16. buildAST = true; // uses CommonAST by default
  17. }
  18. // define a bunch of specific AST nodes to build.
  19. // can override at actual reference of tokens in grammar
  20. // below.
  21. tokens {
  22. PLUS<AST=PLUSNode>;
  23. STAR<AST=MULTNode>;
  24. }
  25. expr
  26. : mexpr (PLUS^ mexpr)* SEMI!
  27. ;
  28. mexpr
  29. : atom (STAR^ atom)*
  30. ;
  31. atom: INT<AST=INTNode> // could have done in tokens{} section
  32. ;
  33. class CalcLexer extends Lexer;
  34. WS_ : (' '
  35. | 't'
  36. | 'n'
  37. | 'r')
  38. { _ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; }
  39. ;
  40. LPAREN: '('
  41. ;
  42. RPAREN: ')'
  43. ;
  44. STAR: '*'
  45. ;
  46. PLUS: '+'
  47. ;
  48. SEMI: ';'
  49. ;
  50. protected
  51. DIGIT
  52. : '0'..'9'
  53. ;
  54. INT : (DIGIT)+
  55. ;