gpt4 book ai didi

c - 如何导出 C 表达式 "4 - 2 - 1"?

转载 作者:太空宇宙 更新时间:2023-11-04 02:46:24 29 4
gpt4 key购买 nike

我正在学习编译理论类(class),但我似乎无法从免费的 C99 文档中弄清楚如何推导出这个表达式。

我的两个主要问题是:

1) 遵循了多少条规则?尽可能多?

例如“4”可以停在数字、整数常量或常量处。我想它被解析为一个常量,但我似乎没有在文档中找到这个问题的答案。

2)如何从规则推导出4 - 2 - 1:

additive-expression:
multiplicative-expression
additive-expression + multiplicative-expression
additive-expression – multiplicative-expression

由于为简洁起见我没有包括其他规则,常量是乘法表达式。

推导也是如此

(4 - (2 - 1)),或 ((4 - 2) - 1)?我知道它是后者,因为执行时减法的结果,但是C99文档中在哪里描述了这个概念?这个概念是如何命名的?这是左文法还是右文法的意图?

作为引用,我使用了 n1256 .

最佳答案

对于 2),它不能是 (4 - (2 - 1)),因为这是遵循规则的情况

additive-expression: additive-expression - multiplicative-expression

那么 2 - 1 必须是乘法表达式,尝试以这种方式解析(如果语法明确)将失败。这就是为什么你可以用括号强制解释(比如 4 - (2 - 1),因为 (2 - 1) 是一个乘法表达式,因为 ( 表达式) 是一个基本表达式。

我觉得剩下的概念associativity .您可以在6.5.16 中的实例语法中看到右结合性的实例

assignment-expression: unary-expression assignment-operator assignment-expression

对于 1),在预处理器到达它之后,最终整个文件被解析为一个 translation-unit,参见 5.1.1.1。如果您只是在解析 4,您将无法停止,直到它适合某个地方的语法。您不是从单个角色开始,而是以它们结束。

关于c - 如何导出 C 表达式 "4 - 2 - 1"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26808845/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com