该标准如何定义 C 程序?
How do the standard define a C program?
我正在研究如何制作字节码解释器(我正在研究的语言是站点 https://craftinginterpreters.com/ 上的 clox)。在其中,有效的 clox 程序被定义为声明列表。声明定义为 class、函数或变量声明或语句。
现在在 C 中,我知道有不同类型的声明和不同类型的语句,但是 none 类型的声明是语句,none 类型的语句是声明。我认为任何可能的 C 代码行都是一个或另一个那么标准如何定义 C 程序?
可以是定义或语句的行列表?
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
它继续提供更多细节,例如,它告诉我们语句执行的顺序。
A statement specifies an action to be performed. Except as indicated, statements are executed in sequence.
然后你深入研究。例如6.8.4定义了一个selection-statement
,涵盖了基本的控制结构if,else,switch.
selection-statement:
if (expression) statement
if (expression) statement else statement
switch (expression) statement
注意语句如何由更多语句组成。
这样就建立了语言的语法。
C 标准将翻译单元(实际上是正在编译的源文件,包括它包含在 #include
中的所有文件)定义为 external-declaration 的列表项,每个 external-declaration 是 function-definition 或 declaration (C 2018 6.9 1).
因此,从根本上说,C 程序的每个源文件都是一个声明列表,包括函数定义。
每个函数定义在声明函数类型及其参数的部分之后,有一个复合语句 (6.9.1 1)。 复合语句是声明或语句项的列表,包含在{
和}
(6.8.2 1).
每个声明告诉我们(通常1)一个或多个标识符(6.8 2 和 5)。 语句 是计算机“做某事”的某种指令,例如迭代循环或计算表达式。在C语法中,声明和语句之间没有重叠。
有关声明的更多信息在 C 2018 标准的第 6.7 条中,有关声明的更多信息在第 6.8 条中。
脚注
1 在C语法中,一个static_assert-declaration也是一个声明。它不声明任何标识符,而是创建一个编译时断言,该断言经过测试并在断言失败时生成错误消息。
我正在研究如何制作字节码解释器(我正在研究的语言是站点 https://craftinginterpreters.com/ 上的 clox)。在其中,有效的 clox 程序被定义为声明列表。声明定义为 class、函数或变量声明或语句。
现在在 C 中,我知道有不同类型的声明和不同类型的语句,但是 none 类型的声明是语句,none 类型的语句是声明。我认为任何可能的 C 代码行都是一个或另一个那么标准如何定义 C 程序?
可以是定义或语句的行列表?
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
它继续提供更多细节,例如,它告诉我们语句执行的顺序。
A statement specifies an action to be performed. Except as indicated, statements are executed in sequence.
然后你深入研究。例如6.8.4定义了一个selection-statement
,涵盖了基本的控制结构if,else,switch.
selection-statement:
if (expression) statement
if (expression) statement else statement
switch (expression) statement
注意语句如何由更多语句组成。
这样就建立了语言的语法。
C 标准将翻译单元(实际上是正在编译的源文件,包括它包含在 #include
中的所有文件)定义为 external-declaration 的列表项,每个 external-declaration 是 function-definition 或 declaration (C 2018 6.9 1).
因此,从根本上说,C 程序的每个源文件都是一个声明列表,包括函数定义。
每个函数定义在声明函数类型及其参数的部分之后,有一个复合语句 (6.9.1 1)。 复合语句是声明或语句项的列表,包含在{
和}
(6.8.2 1).
每个声明告诉我们(通常1)一个或多个标识符(6.8 2 和 5)。 语句 是计算机“做某事”的某种指令,例如迭代循环或计算表达式。在C语法中,声明和语句之间没有重叠。
有关声明的更多信息在 C 2018 标准的第 6.7 条中,有关声明的更多信息在第 6.8 条中。
脚注
1 在C语法中,一个static_assert-declaration也是一个声明。它不声明任何标识符,而是创建一个编译时断言,该断言经过测试并在断言失败时生成错误消息。