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

编译器/解释器

开发平台:

Others

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