为什么两个ANLTR解析器以不同方式解释相同的字符串?

时间:2012-02-02 23:20:13

标签: 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; } ;

我和以下字符串:

  

(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'

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

1 个答案:

答案 0 :(得分:1)

  

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

翻译是错误的:你的语法没有错。