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. }
  7. {
  8. import java.io.*;
  9. class Main {
  10. public static void main(String[] args) {
  11. try {
  12. TinyCLexer lexer = new TinyCLexer(new DataInputStream(System.in));
  13. TinyCParser parser = new TinyCParser(lexer);
  14. parser.program();
  15. } catch(Exception e) {
  16. System.err.println("exception: "+e);
  17. }
  18. }
  19. }
  20. }
  21. class TinyCParser extends Parser;
  22. options {
  23. importVocab=TinyC; // use vocab generated by lexer
  24. }
  25. program
  26. : ( declaration )* EOF
  27. ;
  28. declaration
  29. : (variable) => variable
  30. | function
  31. ;
  32. declarator
  33. : id:ID
  34. | STAR id2:ID
  35. ;
  36. variable
  37. : type declarator SEMI
  38. ;
  39. function
  40. : type id:ID LPAREN
  41. (formalParameter (COMMA formalParameter)*)?
  42. RPAREN
  43. block
  44. ;
  45. formalParameter
  46. : type declarator
  47. ;
  48. type:
  49. (
  50. TK_int
  51. | TK_char
  52. | id:ID
  53. )
  54. ;
  55. block
  56. : LCURLY ( statement )* RCURLY
  57. ;
  58. statement
  59. : (declaration) => declaration
  60. | expr SEMI
  61. | TK_if LPAREN expr RPAREN statement
  62. ( TK_else statement )?
  63. | TK_while LPAREN expr RPAREN statement
  64. | block
  65. ;
  66. expr: assignExpr
  67. ;
  68. assignExpr
  69. : aexpr (ASSIGN assignExpr)?
  70. ;
  71. aexpr
  72. : mexpr (PLUS mexpr)*
  73. ;
  74. mexpr
  75. : atom (STAR atom)*
  76. ;
  77. atom: ID
  78. | INT
  79. | CHAR_LITERAL
  80. | STRING_LITERAL
  81. ;