2011-07-12 65 views
1

如何在bison/yacc GLR解析器中獲得'expected token'?如何在bison/yacc GLR解析器中獲得'expected token'?

嗨,

在該項目中我做,there'er一些曖昧gramar。所以我試圖用%glr-parser來解決轉換/減少confilicts。

當我使用非GLR解析器時,我可以在檢測語法錯誤時使用yystate(全局變量)來獲得「預期的標記」。但切換到GLR解析器後,我發現它不再是全局變量。

所以我的問題是,反正是有得到的GLR分析器「預期令牌」時,有一個語法錯誤?

+0

你解決這個問題? – haroldcampbell

回答

1

在GLR解析器中沒有有效的yystate信息是正確的,因此不能有一個簡單的「預期標記」解決方案。

看出爲什麼必須理解默認LALR分析器和GLR分析算法之間的差異。這裏有很好的文檔:http://www.delorie.com/gnu/docs/bison/bison_11.html。基本上,GLR(通用LR)執行多個併發線程,每個線程嘗試不同的模糊備選方法來搜索匹配項。如果它們中沒有一個與解析失敗相匹配,並且出現語法錯誤情況。因此不可能有單個預期的令牌,但可能有許多預期的令牌。這就是它含糊不清的原因。一個好的文件,解釋Bison分析器是如何工作的是在這裏:http://www.cs.uic.edu/~spopuri/cparser.html,這說明在非GLR解析yystate變量的函數。

的GLR分析器產生更好的錯誤消息的方法,@ RICI的回答這個問題最好是覆蓋:Additional syntax error message on GLR parser when syntax is ambiguous;而且在很多方面這個問題真的是這個問題的重複。

它只是還沒有,因爲它是相當模糊的,爲什麼他們都問同樣的問題,關閉爲重複。

相關問題