这段代码在C中产生了哪种类型的错误?语法还是语义



以下代码会生成哪个错误?根据我迄今为止阅读的信息,语法错误主要在编译时识别,语义错误在运行时识别。那么,下面的代码是否会引发语法错误?

void f(){
return 0;
}

此错误在编译时检测到。

";语法错误";通常包括一些超越形式语法的分析,特别是因为编译器可能是使用递归下降语法分析器实现的,或者具有超越形式语法分析器的纯数学所需的嵌入逻辑。C、 特别是,它需要lexer和解析器之间的一些反馈,并且不能是一个纯上下文无关的语法解析器。(如果你感兴趣,那是因为在遵循语法时,typedef名称必须被理解为类型(

如果你是一个开发人员,你会称之为";语法错误";因为编译器很容易找到它,这自然是它生成代码所需要理解的内容的一部分。它不需要比它必须做的事情更深入的静态分析。

如果你是一名学习语法分析器和语法的CS学生,你会注意到它在语法上是正确的,但错误在于所陈述的内容。这意味着它不是语法错误,而是语义错误。

这种形式上的区分在现实生活中不是很有用,因为真实的语言需要一些语义知识才能进行解析。因此,解析器确实可以是发出错误的代理,因为在这个过程的早期,它被设置为想要一个没有参数的空关键字。因此,对于这样的实现来说,这是一个语法问题,但语义分析早些时候被应用于修改解析器。

简而言之,这取决于你的定义。如果选择的定义是关于工具的实现,那么你就不能抽象地说。

相关内容

最新更新