在Antlr Lexer中,我如何实现解析这样的令牌:
包含任何非空格字母但不包含“。{”的单词。我能想出的最好的是使用语义谓词。
WORD: WL+ {!getText().contains(".{")};
WL: ~[ \n\r\t];
我有点担心使用语义谓词虽然因为WORD在这里会被数倍数倍的麻烦,我认为把语义谓词命中将会达到性能。
这要求我需要解析类似的内容:
TOKEN_ONE.{TOKEN_TWO}
虽然TOKEN_ONE可以包括。和{在其信中。
我正在使用Antlr 4.
答案 0 :(得分:0)
您需要在输入中的.
之后立即将谓词评估限制为大小写。
WORD
: ( ~[. \t\r\n]
| '.' {_input.LA(1)!='{'}?
)+
;
答案 1 :(得分:-2)
如何将你的问题改为等同的“一个单词包含除空格或点或左括号括号之外的任何字符。”
然后勒克斯规则就是:
WORD: ~[ \n\r\t.{]*