2012-02-02 59 views
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'

什么可以的原因这两个程序之间的不一致?

回答

1

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

解释器是越野车:你的语法没有问题。

相关问题