我有以下ANTLR语法:
grammar Tasks;
options {
language = Java;
}
tokens {
TODO = 'TODO';
}
plan : block;
block: '(' TODO ( TODO | block )* ')';
WS : ( ' ' | '\t' | '\r' | '\n' | '\v' ) { $channel = HIDDEN; } ;
我和以下字符串:
(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'
两个程序之间存在这种不一致的原因是什么?
答案 0 :(得分:1)
两个程序之间存在这种不一致的原因是什么?
翻译是错误的:你的语法没有错。