使用ANTLR 3,我的词法有规则词法规则可选后缀不匹配,当它应该使用这种这些匹配正确</p> <pre><code>SELECT VAR1 ASSIGN TO SELECT VAR1 ASSIGN USING </code></pre> <p>匹配
SELECT_ASSIGN:
'SELECT' WS+ IDENTIFIER WS+ 'ASSIGN' WS+ (('TO'|'USING') WS+)?
,这也符合
SELECT VAR1 ASSIGN FOO
但是这不符合
SELECT VAR1 ASSIGN TWO
鉴于我在标准中将TO | USING标记为可选项。
从生成的Java代码,我看到了 当词法分析器注意到的两个T,它会匹配(“至”) 但由于没有找到ØT后 然后生成失败....返回所有从规则的方式 - 因此不匹配。
如何让我的词法规则来匹配,当输入了单词以字符开始与规则
基本上,我想我的规则是为了匹配这个(什么它已经匹配旁边的后缀可选部分 - 如lised在开始):
SELECT VAR1 ASSIGN TWO
请建议我如何接近/解决这种情况。
注:
这些规则建议在解析器 - 但我有这个在词法分析器 - 因为我不想来解析解析器整个输入,并且要分析的兴趣只是内容。因此,在词法分析器中使用这些规则,我找到了我真正想要解析器解析的部分。
更新1 我可以做2条规则绕过这个问题,像这样:
SELECT_ASSIGN_USING_TO
: tok='SELECT' WS+ name=IDENTIFIER WS+ 'ASSIGN' WS+ ('USING'|'TO')
SELECT_ASSIGN
: tok='SELECT' WS+ name=IDENTIFIER WS+ 'ASSIGN'
但它是可以做到所期望的一个词法规则?
请提供一个简单但完整的词法分析器语法来完成此操作(a [mcve]) - 问题可能出现在另一个词法分析器规则中。 –