标准如何定义C程序?

问题描述 投票:2回答:2

我正在研究如何制作字节码解释器(我正在研究的语言是站点https://craftinginterpreters.com/上的clox)。在其中,有效的clox程序定义为声明列表。声明定义为类,函数或变量声明,或者定义为语句。

现在在C中,我知道有不同类型的声明和不同类型的语句,但是声明的类型都不是语句,语句的类型都不是声明。我认为任何可能的C代码行都可能是另一行,那么标准如何定义C程序?

可以是定义或语句的行列表?

c language-lawyer standards
2个回答
0
投票

C程序由其语法和标准中定义的实现细节定义。 Get yourself a copy of the C standard,任何版本都可以用作基础知识,并查看语法。语法摘要可在附件A中找到。

第6.8节将一条语句定义为许多特定类型的语句之一。

statement:
  labeled-statement
  compound-statement
  expression-statement
  selection-statement
  iteration-statement
  jump-statement

接着提供了更多详细信息,例如,它告诉我们语句的执行顺序。

一条语句指定要执行的动作。除非另有说明,否则语句按顺序执行。

然后,您将深入研究。例如,6.8.4定义了一个selection-statement,它覆盖了if和else开关的基本控制结构。

selection-statement:
  if (expression) statement
  if (expression) statement else statement
  switch (expression) statement

请注意如何构建更多的语句。

并且以此方式建立了语言的语法。


0
投票

C标准定义了一个翻译单元(实际上是正在编译的源文件,包括它包含在#include中的所有文件)作为external-declaration项目的列表,以及每个external-declarationfunction-definitiondeclaration(C 2018 6.9 1)。

因此,从根本上讲,C程序的每个源文件都是声明列表,包括函数定义。

每个功能定义在声明函数的类型及其参数的部分之后,具有复合语句(6.9.1 1)。 复合语句是包含在{}(6.8.2 1)中的声明语句项目的列表。

每个声明

告诉我们(通常)一个或多个标识符(6.8 2和5)。 statement是计算机“执行某些操作”的某种指令,例如迭代循环或评估表达式。在C语法中,声明和语句之间没有重叠。
© www.soinside.com 2019 - 2024. All rights reserved.