【发布时间】:2011-09-02 12:35:43
【问题描述】:
我一直在为我的程序编写一个扫描器,大多数在线教程都包括一个解析器和一个扫描器。似乎不可能在不同时编写解析器的情况下编写词法分析器。我只是想生成令牌,而不是解释它们。我想识别 INT 标记、浮点标记和一些标记,如“开始”和“结束”
我对如何匹配关键字感到困惑。我尝试了以下方法失败:
KEYWORD : KEY1 | KEY2;
KEY1 : {input.LT(1).getText().equals("BEGIN")}? LETTER+ ;
KEY2 : {input.LT(1).getText().equals("END")}? LETTER+ ;
FLOATLITERAL_INTLITERAL
: DIGIT+
(
{ input.LA(2) != '.' }? => '.' DIGIT* { $type = FLOATLITERAL; }
| { $type = INTLITERAL; }
)
| '.' DIGIT+ {$type = FLOATLITERAL}
;
fragment LETTER : ('a'..'z' | 'A'..'Z');
fragment DIGIT : ('0'..'9');
IDENTIFIER
: LETTER
| LETTER DIGIT (LETTER|DIGIT)+
| LETTER LETTER (LETTER|DIGIT)*
;
WS //Whitespace
: (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;}
;
【问题讨论】:
标签: compiler-construction antlr antlr3 lexer