我在ANTLR中创建一个简单的语法来匹配某些命令。我坚持使用特殊字符的令牌。
这些命令会匹配像......这样的句子。
connect "HAL" computer 4
connect "HAL256" computer 8
connect "HAL2⁸" computer 16
connect "HAL 9000" computer 32
connect "HAL \x0A25 | 32" computer 64
......产生类似的东西:
很明显我的问题出在ID令牌中,但我不知道如何解决它。这是我目前的语法:
grammar foo;
ID : '"' ('\u0000'..'\uFFFF')+ '"' ;
NUMBER : ('0'..'9')* ;
SENTENCE : 'connect ' ID ' computer' NUMBER ;
我怎么能这样做?
答案 0 :(得分:0)
你的语法有几个问题:
NUMBER
匹配空字符串:词法规则必须始终匹配至少1个字符SENTENCE
应该是解析器规则(请参阅:Practical difference between parser rules and lexer rules in ANTLR?)('\u0000'..'\uFFFF')+
也匹配您可能不想要的'"'
尝试这样的事情:
sentence : K_CONNECT ID K_COMPUTER NUMBER;
K_CONNECT : 'connect';
K_COMPUTER : 'computer';
ID : '"' (~'"')+ '"';
NUMBER : ('0'..'9')+;
SPACE : (' ' | '\t' | '\r' | '\n')+ {skip();};