我在看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。要获得唯一的答案,使用这两个规则的规则必须足够具体,以便仅将给定的输入序列与单个规则序列匹配,或者您可以使用优先级从多个可能的序列中选择单个规则序列。