簡體   English   中英

為什么這個語法在 LR(0) 中有 Reduce/Reduce 沖突?

[英]Why this grammar has Reduce/Reduce conflict in LR(0)?

我有以下語法:

S -> a b D E
S -> A B E F
D -> M x
E -> N y
F -> z
M -> epsilon
N -> epsilon

我的教科書說 LR(0) 中存在 Reduce/Reduce 沖突。 我建了一個圖,發現有一個state:

S -> a b . D E
S -> A B . E F
D -> . M x
E -> . N y
M -> .
N -> .

教科書說這是一個減少/減少沖突。 我試圖找出原因。 如果我構建 SLR 表,我會得到以下行(3 是上面的 state):

在此處輸入圖像描述

那是因為:

  • Follow(M)={x} 所以我們可以從 state 3 減少到規則 6。
  • Follow(N)={y} 所以我們可以從 state 3 減少到規則 7。

有人告訴我,如果有一個帶有 S/R 的單元格,則存在沖突 S/R,如果有一個帶有 R/R 的單元格,則存在沖突 R/R。 但我沒有在表格的同一個單元格中看到兩個 Rs。 那么為什么它是一個減少/減少沖突呢?

您展示了一個 SLR(1) 解析表,其中的列對應於長度為 1 的前瞻。它是正確的,並且沒有沖突。

但是這里我們討論的是沒有前瞻的 LR(0) 機器。 (這是 LR(0) 中的 0。)機器可以做出的唯一決定是移位或減少,由於它不能使用前瞻,它只能使用 state 本身。 給定的 state 必須是移位 state 或減少 state (並且,如果減少 Z9ED39E25631586B73E,則為減少生產)。

(如果它令人困惑,而且通常是,前瞻的概念並不是指使用移位符號來決定要轉換到哪個 state。轉換是基於移位符號進行的,此時不再前瞻的一部分。)

所以在那state中,沒有可能的換檔動作; 在項目集中的所有項目中,點位於末尾或下一個符號是非終結符(暗示從歸約返回后執行 GOTO 操作)。

但是 state 沒有獨特的減少。 根據前瞻,解析器需要選擇減少 M 或減少 N。由於沒有前瞻,因此無法做出決定,因此這是一個沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM