【发布时间】:2016-07-04 11:56:07
【问题描述】:
有没有办法在 Antlr4 中“伪造”回顾? 我想根据我所在位置之前的令牌解决一些歧义。
编辑
read: STAR text STAR text STAR text
| STAR text STAR KEY_WORD STAR text
text: STR +;
@lexer::members {
private boolean checkAhead(int maxAmountOfCharacters, String pattern) {
final Interval ahead = new Interval(this._tokenStartCharIndex, this._tokenStartCharIndex + maxAmountOfCharacters - 1);
return this._input.getText(ahead).matches(pattern);
}
KEY_WORD: LETTER LETTER LETTER LETTER LETTER ;
STAR :'*';
STR: {( !checkAhead(6, "([A-Z]){5}[*](\\D|$)") }?
(
LETTER
| DIGIT
)+
;
我希望输入仅当它是 STAR KEY_WORD STAR 时才被读取为 KEY_WORD 现在,如果文本的最后一个单词是 [A-Z]{5},则它与 KEY_WORD 匹配
【问题讨论】:
-
请分享部分rour语法和你的问题的简单示例场景
-
抱歉,问题和示例已更改
-
需要提供标有预期结果的样本输入。从您的描述中不清楚您的要求。
标签: java grammar antlr4 lexer ambiguous