[英]Ambiguity in ANSI C YACC grammar
我正在看ANSI C YACC語法。 還有一些我不理解的東西。 http://www.lysator.liu.se/c/ANSI-C-grammar-y.html#expression
assignment_expression
: conditional_expression
| unary_expression assignment_operator assignment_expression
;
constant_expression
: conditional_expression
;
這是賦值表達式和常量表達式的規則。 我的問題是,他們怎么都可以使用conditional_expression
來減少? 如果有一個令牌減少到conditional_expression,則在令牌減少之后,YACC解析器如何知道接下來如何減少assignment_expression
和constant_expression
之間的令牌? 我想我缺少了一些巨大的東西,但我一個人找不到。 謝謝
沒有歧義,因為沒有上下文可以同時出現assignment_expression
和constant_expression
。
擁有形式規則絕對沒有錯
a: z;
b: z;
c: z;
如果a
, b
和c
都出現在不同的上下文中。 如果您有以下內容
t: a | b | c;
那就有問題了 但是conditional_expression
沒有類似的東西。
EBNF語法可以同時具有多個有效的規則/狀態,這意味着在這種情況下,如果找到條件,則可以同時匹配Assignment_expression和constant_expression。 要獲得唯一答案,使用這兩個規則的規則必須足夠具體,以僅將給定輸入序列與單個規則序列進行匹配,或者可以使用優先級從多個可能的序列中選擇單個規則序列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.