首页 > 解决方案 > 编译期间 C 中何时需要空格(或括号)?

问题描述

我正在学习编译是如何工作的,我的最终目标是编写一个迷你 C 编译器。我还处于这个项目的开始阶段。当我在构建 AST 的扫描器和解析器部分工作时,我意识到在 、 、 或 等表达式中需要空格(i+ +4i+(+4)括号i- -4i-(-4)。否则,在i--4表达式(例如)中,--被解释为一元运算符--并引发错误。我完全理解其中的原因。这不是问题。
问题如下,之前,我天真地认为空格在 C 中并不那么重要,如果只是出于代码可读性的考虑。但是现在,我想知道是否还有其他类似上述论文的例子?

标签: cparsingcompiler-constructionflex-lexer

解决方案


我不得不修复一些旧代码并进行更改

#define ALT_7      (0xfe+OFFSET)

#define ALT_7      (0xfe +OFFSET)

原因是这0xfe+OFFSET是一个预处理数字标记,而不是人们可能天真的认为的三个标记。旧的编译器将其解析为 3,但新的编译器将其解析为无效的数字常量而失败。

预处理器方面可能还有更多内容,但它更加模糊(作为 C/C++ 预处理的整个主题)。


推荐阅读