2

我正在學習「Engineering a Compiler,2nd Edition」。而且我知道什麼是LR(1)語法,但在本書中我找不到運算符優先級語法。LR(1)語法和運算符優先級語法有什麼區別?

然後我借「編譯器 - 原理,技術和工具」從library.But我仍然無法找到它。所以我想知道,LR(1)語法和運算符優先級語法之間有什麼區別。

如果LR(1)語法可以替換運算符的優先語法。謝謝!

+0

這裏關閉的話題。試試[Wikipedia](https://en.wikipedia.org/wiki/Operator-precedence_grammar)。 – EJP 2014-11-24 05:31:57

+0

這個問題似乎是脫離主題,因爲它屬於計算機科學。 – EJP 2014-11-24 05:32:34

回答

2

運算符語法是一種上下文無關語法,其中任何右側都沒有連續的非終端。 (直觀上,每個生產都有一個操作符,如用於數學表達式的語法。)

運算符優先級語法是運算符語法,其中解析自動機可以根據最靠近解析堆棧頂部的終端和先行令牌。這種優先關係不需要是完整的,也不是傳遞的,也不是反對稱的。

我很確定每個運算符優先級語法都是LR(1),但反過來肯定是不正確的。例如,LR(1)語法不具有對連續的非終端的限制,並且LR(1)語法中的移位/縮減決定很可能不與解析棧中的最上面的終端相關和前視標記。儘管如此,一些有用的語言可以用運算符優先級語法表示。

與LR解析一樣,運算符優先解析是一種自下而上的技術。它可能比LALR算法更容易理解,但它沒有其他明顯的優勢:速度並不快;它是不太可靠的(從某種意義上講,某些實現會識別錯誤的句子);而且很難驗證。然而,在發現LALR算法之前,LR(1)自動機的大小(以及有限的可用計算資源)使得算子優先級解析看起來像是一種合理的方法。

現在,使用衆多可用的解析器生成器之一會更好。