Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction 词法分析器能否在编译期间检查语法规则?_Compiler Construction_Compilation_Lexical Analysis_Lexical - Fatal编程技术网

Compiler construction 词法分析器能否在编译期间检查语法规则?

Compiler construction 词法分析器能否在编译期间检查语法规则?,compiler-construction,compilation,lexical-analysis,lexical,Compiler Construction,Compilation,Lexical Analysis,Lexical,很抱歉问这么愚蠢的问题,但我和我的朋友们就词法分析发生了争论,我们决定向社区提问 问题是: 在C语法中,语句“int some_variable=;”在词法分析阶段或语法分析阶段是否被解释为无效。 感谢词法分析检查您的所有标记是否有效(它们是有效的)。解析(或语法分析)检查标记序列是否在语法中形成有效的结果(它没有)。因此,这将通过词法分析阶段,而不通过语法分析阶段。在语法分析阶段,也就是在C中,词法分析首先发生。然后,预处理器将宏及其所有神奇的转换应用于生成的令牌流。只有在预处理器执行操作之后

很抱歉问这么愚蠢的问题,但我和我的朋友们就词法分析发生了争论,我们决定向社区提问

问题是: 在C语法中,语句“int some_variable=;”在词法分析阶段或语法分析阶段是否被解释为无效。
感谢

词法分析检查您的所有标记是否有效(它们是有效的)。解析(或语法分析)检查标记序列是否在语法中形成有效的结果(它没有)。因此,这将通过词法分析阶段,而不通过语法分析阶段。

在语法分析阶段,也就是在C中,词法分析首先发生。然后,预处理器将宏及其所有神奇的转换应用于生成的令牌流。只有在预处理器执行操作之后,才会进行语法分析


因此,要知道问题的答案,只需在预处理器中运行代码。对于
gcc
,这是使用
-E
命令行标志的问题。如果预处理器满意,那么根据定义,词法分析进行得很好(您的示例就是这样)。

是的,我在打字时就想到了这一点。