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

编译器/解释器

开发平台:

Others

  1. /*
  2.  * Make sure to run antlr.Tool on the lexer.g file first!
  3.  */
  4. options {
  5. mangleLiteralPrefix = "TK_";
  6. language="Cpp";
  7. }
  8. class TinyCParser extends Parser;
  9. options {
  10. importVocab=TinyC; // use vocab generated by lexer
  11. }
  12. program
  13. : ( declaration )* EOF
  14. ;
  15. declaration
  16. : (variable) => variable
  17. | function
  18. ;
  19. declarator
  20. : id:ID
  21. | STAR id2:ID
  22. ;
  23. variable
  24. : type declarator SEMI
  25. ;
  26. function
  27. : type id:ID LPAREN
  28. (formalParameter (COMMA formalParameter)*)?
  29. RPAREN
  30. block
  31. ;
  32. formalParameter
  33. : type declarator
  34. ;
  35. type:
  36. (
  37. TK_int
  38. | TK_char
  39. | id:ID
  40. )
  41. ;
  42. block
  43. : LCURLY ( statement )* RCURLY
  44. ;
  45. statement
  46. : (declaration) => declaration
  47. | expr SEMI
  48. | TK_if LPAREN expr RPAREN statement
  49. ( TK_else statement )?
  50. | TK_while LPAREN expr RPAREN statement
  51. | block
  52. ;
  53. expr: assignExpr
  54. ;
  55. assignExpr
  56. : aexpr (ASSIGN assignExpr)?
  57. ;
  58. aexpr
  59. : mexpr (PLUS mexpr)*
  60. ;
  61. mexpr
  62. : atom (STAR atom)*
  63. ;
  64. atom: ID
  65. | INT
  66. | CHAR_LITERAL
  67. | STRING_LITERAL
  68. ;