簡體   English   中英

ANSI C YACC語法中的歧義

[英]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_expressionconstant_expression之間的令牌? 我想我缺少了一些巨大的東西,但我一個人找不到。 謝謝

沒有歧義,因為沒有上下文可以同時出現assignment_expressionconstant_expression

擁有形式規則絕對沒有錯

a: z;
b: z;
c: z;

如果abc都出現在不同的上下文中。 如果您有以下內容

t: a | b | c;

那就有問題了 但是conditional_expression沒有類似的東西。

EBNF語法可以同時具有多個有效的規則/狀態,這意味着在這種情況下,如果找到條件,則可以同時匹配Assignment_expression和constant_expression。 要獲得唯一答案,使用這兩個規則的規則必須足夠具體,以僅將給定輸入序列與單個規則序列進行匹配,或者可以使用優先級從多個可能的序列中選擇單個規則序列。

暫無
暫無

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

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