为什么两个 ANLTR 解析器对同一个字符串的解释不同?
我有以下 ANTLR 语法:
grammar Tasks;
options {
language = Java;
}
tokens {
TODO = 'TODO';
}
plan : block;
block: '(' TODO ( TODO | block )* ')';
WS : ( ' ' | '\t' | '\r' | '\n' | '\v' ) { $channel = HIDDEN; } ;
I 和以下字符串:
(TODO(TODO TODO(TODO)TODO))
它被 ANTRL 生成的解析器从语法中成功解析,例如,使用以下演示:
import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CommonTokenStream;
public class ANTLRDemo {
public static void main(String[] args) throws Exception {
ANTLRStringStream in = new ANTLRStringStream("(TODO (TODO TODO (TODO) TODO))");
TasksLexer lexer = new TasksLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
TasksParser parser = new TasksParser(tokens);
parser.block();
}
}
但是,Eclipse 插件 ANTLR IDE Tools 2.1.1 在解释相同字符串时返回错误:
MismatchedTokenException:第 1:6 行不匹配输入“(”期望 '\u0007'
两个程序之间不一致的原因可能是什么?
I have the following ANTLR grammar:
grammar Tasks;
options {
language = Java;
}
tokens {
TODO = 'TODO';
}
plan : block;
block: '(' TODO ( TODO | block )* ')';
WS : ( ' ' | '\t' | '\r' | '\n' | '\v' ) { $channel = HIDDEN; } ;
I and the following string:
(TODO (TODO TODO (TODO) TODO))
It is sucessfully parsed by the parser generated by ANTRL from the grammar, e.g., using the following demo:
import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CommonTokenStream;
public class ANTLRDemo {
public static void main(String[] args) throws Exception {
ANTLRStringStream in = new ANTLRStringStream("(TODO (TODO TODO (TODO) TODO))");
TasksLexer lexer = new TasksLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
TasksParser parser = new TasksParser(tokens);
parser.block();
}
}
However, Eclipse plugin ANTLR IDE Tools 2.1.1 returns error when interpreting the same string:
MismatchedTokenException: line 1:6 mismatched input '(' expecting
'\u0007'
What can be the reason of this inconsistency between both programs?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
解释器有问题:你的语法没有任何问题。
The interpreter is buggy: there's nothing wrong with your grammar.