- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定,但我认为 Antlr 回溯选项无法正常工作或其他原因...
这是我的语法:
grammar Test;
options {
backtrack=true;
memoize=true;
}
prog: (code)+;
code
: ABC {System.out.println("ABC");}
| OTHER {System.out.println("OTHER");}
;
ABC : 'ABC';
OTHER : .;
如果输入流是“ABC”,那么我会看到打印出 ABC。
如果输入流是“ACD”,那么我会看到 OTHER 打印 3 次。
但是如果输入流是“ABD”那么我会看到第 1:2 行不匹配的字符 'D' 期待 'C'第 1:3 行需要 (...)+ 循环在输入 '' 处不匹配任何内容
但我希望看到 OTHER 三次,因为如果第一条规则失败,输入应该匹配第二条规则。
这没有任何意义。为什么解析器在看到最后一个字符不是“C”时没有回溯?但是,“ACD”没问题。
有人可以帮我解决这个问题吗???谢谢你的时间!!!
最佳答案
选项 backtrack=true
仅适用于解析器规则,不适用于词法分析器规则。
我知道的唯一解决方法是让 "AB"
后跟 "C"
以外的其他字符在相同的 中匹配>ABC
规则,然后手动发出其他 token 。
演示:
grammar Test;
@lexer::members {
List<Token> tokens = new ArrayList<Token>();
public void emit(int type, String text) {
state.token = new CommonToken(type, text);
tokens.add(state.token);
}
public Token nextToken() {
super.nextToken();
if(tokens.size() == 0) {
return Token.EOF_TOKEN;
}
return tokens.remove(0);
}
}
prog
: code+
;
code
: ABC {System.out.println("ABC");}
| OTHER {System.out.println("OTHER");}
;
ABC
: 'ABC'
| 'AB' t=~'C'
{
emit(OTHER, "A");
emit(OTHER, "B");
emit(OTHER, String.valueOf((char)$t));
}
;
OTHER
: .
;
关于Antlr 回溯选项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6997546/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!