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

编译器/解释器

开发平台:

Others

  1. options {
  2. language="Cpp";
  3. }
  4. class CalcParser extends Parser;
  5. options {
  6. buildAST = true; // uses CommonAST by default
  7. }
  8. expr
  9. : mexpr (PLUS^ mexpr)* SEMI!
  10. ;
  11. mexpr
  12. : atom (STAR^ atom)*
  13. ;
  14. atom: INT
  15. ;
  16. class CalcLexer extends Lexer;
  17. WS_ : (' '
  18. | 't'
  19. | 'n'
  20. | 'r')
  21. { _ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; }
  22. ;
  23. LPAREN: '('
  24. ;
  25. RPAREN: ')'
  26. ;
  27. STAR: '*'
  28. ;
  29. PLUS: '+'
  30. ;
  31. SEMI: ';'
  32. ;
  33. protected
  34. DIGIT
  35. : '0'..'9'
  36. ;
  37. INT : (DIGIT)+
  38. ;
  39. class CalcTreeWalker extends TreeParser;
  40. expr returns [float r]
  41. {
  42. float a,b;
  43. r=0;
  44. }
  45. : #(PLUS a=expr b=expr) {r = a+b;}
  46. | #(STAR a=expr b=expr) {r = a*b;}
  47. | i:INT {r = atof(i->getText().c_str());}
  48. ;