在Antlr Lexer中,我如何实现这样的令牌解析:
包含任何非空格字母但不包含“.{”的单词。我能想到的最好的办法就是使用语义谓词。
WORD: WL+ {!getText().contains(".{")};
WL: ~[ \n\r\t];我有点担心使用语义谓词,因为这里的单词会被词化数百万次,我认为使用语义谓词会影响性能。
这来自于我需要解析如下内容的需求:
TOKEN_ONE.{TOKEN_TWO}而TOKEN_ONE可以包含。和{在它的信中。
我使用的是Antlr 4。
发布于 2013-10-08 12:23:41
您需要将谓词计算限制在输入中紧跟在.后面的case。
WORD
: ( ~[. \t\r\n]
| '.' {_input.LA(1)!='{'}?
)+
;发布于 2013-10-08 05:08:52
将你的问题重新表述为等价的“一个单词包含除空格、点或左括号之外的任何字符”如何?
那么lexer规则就是:
WORD: ~[ \n\r\t.{]*https://stackoverflow.com/questions/19224181
复制相似问题