ANSI C YACC语法中的歧义

问题描述 投票:2回答:2

我在看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之间的令牌呢?我想我错过了一些巨大的东西,但我自己找不到。谢谢

c grammar yacc
2个回答
4
投票

没有歧义,因为没有可能出现assignment_expressionconstant_expression的背景。

拥有表格规则绝对没有错

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

如果abc都出现在不同的背景下。如果您有以下内容

t: a | b | c;

然后有一个问题。但conditional_expression没有类似的东西。


2
投票

EBNF语法可以同时具有多个有效的规则/状态。这意味着在这种情况下,如果它找到条件,它可以同时匹配assignment_expression和constant_expression。要获得唯一的答案,使用这两个规则的规则必须足够具体,以便仅将给定的输入序列与单个规则序列匹配,或者您可以使用优先级从多个可能的序列中选择单个规则序列。

© www.soinside.com 2019 - 2024. All rights reserved.