2012-02-02 93 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

這兩個程序之間的這種不一致的原因是什麼?

解釋器是越野車:你的語法沒有問題。

相關問題