Antlr 为什么两个ANLTR解析器对同一字符串的解释不同?

Antlr 为什么两个ANLTR解析器对同一字符串的解释不同?,antlr,antlr3,antlrv3ide,Antlr,Antlr3,Antlrv3ide,我有以下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)

我有以下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))

ANTR根据语法生成的解析器成功解析了它,例如,使用以下演示:

   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插件在解释相同字符串时返回错误:

不匹配的TokenException:第1:6行输入不匹配“(”应为 “\u0007”

这两个程序之间不一致的原因是什么

这两个程序之间不一致的原因是什么

翻译很糟糕:你的语法没有问题