在令牌冲突的情况下,如何定义ANTLR词法分析器行为? 让我解释一下“冲突”令牌的含义。 例如,假设定义了以下内容:
INT_STAGE : '1'..'6';
INT : '0'..'9'+;
这里存在冲突,因为在读取一系列数字后,词法分析器将不知道是否存在一个INT或多个INT_STAGE标记(或两者的不同组合)。 在测试之后,看起来如果在INT_STAGE之后定义了INT,那么词法分析器更愿意找到INT_STAGE,但是可能不是INT呢?否则,将找不到INT_STAGE。
另一个例子是:
FOOL: ' fool'
FOO: 'foo'
ID : ('a'..'z'|'A'..'Z'|'_'|'%') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'%')*;
我被告知这是识别所有令牌的“正确”命令: 在阅读“傻瓜”时,词法分析者会找到一个FOOL令牌,而不是FOO ID或其他东西。
答案 0 :(得分:2)
以下逻辑适用:
考虑到这一点,输入"1"
,"2"
,...,"6"
被标记为INT_STAGE
:INT_STAGE
和{{ 1}}匹配相同数量的字符,但首先定义INT
。
输入INT_STAGE
被标记为"12"
,因为它与大多数字符匹配。
我被告知这是"对"为了识别所有的代币:在阅读"傻瓜"词法分析器将找到一个FOOL令牌而不是FOO ID或其他东西。
这是正确的。