2
我有以下ANTLR語法:爲什麼兩個ANLTR解析器不同地解釋相同的字符串?
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'
什麼可以的原因這兩個程序之間的不一致?