lexer.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. class TinyCLexer extends Lexer;
  8. options {
  9. k=2;
  10. exportVocab=TinyC;
  11. charVocabulary = '3'..'377';
  12. }
  13. tokens {
  14. "int"; "char"; "if"; "else"; "while";
  15. }
  16. WS : (' '
  17. | 't'
  18. | 'n' {newline();}
  19. | 'r')
  20. { _ttype = Token.SKIP; }
  21. ;
  22. SL_COMMENT : 
  23. "//" 
  24. (~'n')* 'n'
  25. { _ttype = Token.SKIP; newline(); }
  26. ;
  27. ML_COMMENT
  28. : "/*"
  29. ( { LA(2)!='/' }? '*'
  30. | 'n' { newline(); }
  31. | ~('*'|'n')
  32. )*
  33. "*/"
  34. { $setType(Token.SKIP); }
  35. ;
  36. LPAREN
  37. options {
  38. paraphrase="'('";
  39. }
  40. : '('
  41. ;
  42. RPAREN
  43. options {
  44. paraphrase="')'";
  45. }
  46. : ')'
  47. ;
  48. LCURLY: '{'
  49. ;
  50. RCURLY: '}'
  51. ;
  52. STAR: '*'
  53. ;
  54. PLUS: '+'
  55. ;
  56. ASSIGN
  57. : '='
  58. ;
  59. SEMI: ';'
  60. ;
  61. COMMA
  62. : ','
  63. ;
  64. CHAR_LITERAL
  65. : ''' (ESC|~''') '''
  66. ;
  67. STRING_LITERAL
  68. : '"' (ESC|~'"')* '"'
  69. ;
  70. protected
  71. ESC : '\'
  72. ( 'n'
  73. | 'r'
  74. | 't'
  75. | 'b'
  76. | 'f'
  77. | '"'
  78. | '''
  79. | '\'
  80. | '0'..'3'
  81. (
  82. options {
  83. warnWhenFollowAmbig = false;
  84. }
  85. : DIGIT
  86. (
  87. options {
  88. warnWhenFollowAmbig = false;
  89. }
  90. : DIGIT
  91. )?
  92. )?
  93. | '4'..'7'
  94. (
  95. options {
  96. warnWhenFollowAmbig = false;
  97. }
  98. : DIGIT
  99. )?
  100. )
  101. ;
  102. protected
  103. DIGIT
  104. : '0'..'9'
  105. ;
  106. INT : (DIGIT)+
  107. ;
  108. ID
  109. options {
  110. testLiterals = true;
  111. paraphrase = "an identifier";
  112. }
  113. : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*
  114. ;