我需要制作一个vhdl解析器。我决定从他们的网站http://www.antlr.org/grammar/1202750770887/vhdl.g使用antlr解析器生成器和vhdl语法。 检查语法时遇到问题并出现此错误:
以前的令牌定义永远不能匹配,因为之前 令牌匹配相同的输入:LETTER,INTEGER,DIGIT ......
如果有人之前使用过这个,请告诉我语法是否不正确或者我是否正在做其他错误的事情。
答案 0 :(得分:2)
来自vhdl.g
BASIC_IDENTIFIER
: LETTER ( '_' | LETTER | DIGIT )*
;
...
LETTER
: 'a'..'z' | 'A'..'Z'
;
LETTER,INTEGER和DIGIT看起来都应该是一个片段,因为它们永远不会被解析器规则调用。
fragment LETTER
: 'a'..'z' | 'A'..'Z'
;
编辑:正如Bart所说,由于BASIC_IDENTIFIER在语法中列在LETTER之前并涵盖了LETTER所做的所有情况,因此词法分析器永远不会创建任何LETTER令牌。这就是导致警告的原因。