2014-02-09 29 views
4
  • 如何在字符串列表中獲取Antlr的所有解析錯誤?

我用ANTLR如下:獲取所有Antlr解析錯誤作爲字符串列表

ANTLRInputStream input = new ANTLRInputStream(System.in); 
grLexer lexer = new grLexer(input); 
CommonTokenStream tokens = new CommonTokenStream(lexer); 
grParser parser = new grParser(tokens); 
ParseTree tree = parser.formula(); 
System.out.println(tree.toStringTree(parser)); 

例如

line 1:0 token recognition error at: '(' 
line 1:1 token recognition error at: ')' 
line 1:2 token recognition error at: '(' 
  • 我怎樣才能找出解析的執行沒有錯誤?我會停止工作,如果只有一個解析錯誤

例如

if(tree.hasError()) // FOR EXAMPLE 
    return; 

回答

7
  • 您需要提供的ANTLRErrorListener實現收集有關發生的錯誤的信息。例如,IntelliJ插件使用其SyntaxErrorListener來跟蹤這些信息。

  • 解析完成後,您可以檢查Parser.getNumberOfSyntaxErrors()以查看是否發生錯誤。請注意,這不會從詞法分析器報告錯誤。確保正確報告所有錯誤的最佳方法是以這樣的方式編寫詞法分析器,即它本身永遠不會遇到語法錯誤,而是將無效標記傳遞給解析器進行處理。