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