ansic-YACC语法中的歧义
我正在看ANSI C YACC语法。 还有一件事我不明白。 下面是赋值表达式和常量表达式的规则。 我的问题是,它们如何都使用ansic-YACC语法中的歧义,c,grammar,yacc,C,Grammar,Yacc,我正在看ANSI C YACC语法。 还有一件事我不明白。 下面是赋值表达式和常量表达式的规则。 我的问题是,它们如何都使用条件表达式来减少? 如果有一个标记被缩减为条件_表达式,那么在标记缩减之后,YACC解析器如何知道如何在赋值_表达式和常量_表达式之间缩减下一个标记? 我想我错过了一些重要的东西,但我自己找不到。 谢谢一个EBNF语法可以同时具有多个有效规则/状态。这意味着在这种情况下,如果它找到一个条件,它可以同时匹配赋值表达式和常量表达式。要获得唯一的答案,使用这两个规则的规则必须足
条件表达式来减少?
如果有一个标记被缩减为条件_表达式,那么在标记缩减之后,YACC解析器如何知道如何在赋值_表达式
和常量_表达式
之间缩减下一个标记?
我想我错过了一些重要的东西,但我自己找不到。
谢谢一个EBNF语法可以同时具有多个有效规则/状态。这意味着在这种情况下,如果它找到一个条件,它可以同时匹配赋值表达式和常量表达式。要获得唯一的答案,使用这两个规则的规则必须足够具体,以便只将给定的输入序列与单个规则序列相匹配,或者您可以使用优先级从多个可能的序列中选择单个规则序列。没有歧义,因为没有同时包含赋值表达式的上下文。
可能会出现常量表达式
形式规则绝对没有错
a: z;
b: z;
c: z;
如果a
,b
和c
都出现在不同的上下文中。如果你有以下几点
t: a | b | c;
那就有问题了。但是对于条件表达式
@n.m.对不起,我刚刚编辑过
t: a | b | c;