有關LALR(1)語法分析器,主要涉及解析的細節衝突的一些問題:解決衝突
根據不同LALR在教科書中描述的(1)語法分析器如果遇到轉換/減少衝突,那麼這是語法不是LALR(1)開始的標誌,對吧?
縮小/減少衝突可能會出現在有效 LALR(1)語法,由於國家的合併來自LR(1)做LALR(1),對不對?
優先級和結合,如YACC和野牛GNU使用,被介紹的工具來幫助解決移位/減少衝突,對不對?
此外,關聯性只應由解析器檢查,如果衝突的shift/reduce規則優先級等於先行符號優先級,則在任何其他情況下關聯性是不相關的,對嗎?
我問,因爲我不是100%肯定,案卷不提供有關解決衝突的細節,只有幾行我關於這個問題的發現是in the GNU Bison Manual
一個問題有關野牛上述手動鏈接:
- ?他們爲什麼要求在衝突缺席優先規則或超前記號,選擇是轉變?我會認爲,如果裁減規則有任何優先順序,它就完全沒有優先權而擊敗前瞻。
我剛剛看了龍書第2版,例4.58(第268頁),他們用一個減少/減少衝突的例子來完成該部分,這是合併LR(1)狀態的結果,但他們沒有說出什麼他們是否有解決問題的做法?但爲此,感謝您爲我重申這些概念,現在我認爲我明白了一般的經驗法則:除非您找到需要減少*的證據,否則默認是* shift *。 – ilomambo
@ilomambo:很對,我應該檢查一下這本書,而不是依靠我生鏽的記憶。我確定了答案。至於解決這個問題,在野牛手冊中有一些討論:https://www.gnu.org/software/bison/manual/bison.html#Mysterious-Conflicts(正如它說的,如果你使用野牛,最簡單的解決方案可能是切換到GLR或實驗IELR解析器) – rici
@ilomambo解析器優先級算法確實在龍書第2版中進行了討論。這在4.9.2節中討論。但是,該算法在第293頁開始介紹。基本上,它證實了rici,但更深入一點。 –