[英]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 + S
、 M → S - S
和M → 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.