簡體   English   中英

這種上下文無關的語法是明確的嗎?

[英]Is this context-free grammar unambiguous?

我想知道我想出的語法是否明確。

G(N, T, P, S)

N = {S, M}
T = {+, -, (, ), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
P = {
S → 0, S → 1, … , S → 9
S → ( M )
M → S + S
M → S - S
M → S
}

S 是起始變量,N 是非終結符集合,T 是終結符集合,P 是產生式集合。

這種語法是明確的,也是不確定的。 當對於至少一個有效的輸入字符串存在多於一個語法樹時,語法是不明確的,並且是確定性的,如果對於每個有效的輸入字符串,在解析期間的任何時間,都只有一個要使用的預測。 對於無效的輸入字符串,會有一段時間沒有預測可以使用。

預測M → S + SM → S - SM → S使文法具有不確定性,因為S是它們每個的第一個非終結符號。 但是,在解析所有輸入之后,這不會導致任何輸入的多於一個語法樹,因為S之后的終結符號是+- (在M中)和)S → ( M )中的非終結符M之后將一致確定哪個預測是有效的。

該語法可以用 ABNF 標准語法編寫,如下所示:

S = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / "(" M ")"
M = S "+" S / S "-" S / S

左重構后,語法可以成為確定性語法(不會改變歧義,即語法仍然是明確的):

S = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / "(" M ")"
M = S [("+" / "-") S]

並且使用較短的 ABNF 范圍語法:

S = %x30-39 / "(" M ")"
M = S [("+" / "-") S]

或者使用帶有自動機的單線:

S = %x30-39 / "(" S [("+" / "-") S] ")"

在此處輸入圖像描述

暫無
暫無

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

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