Syntax 编程语言中语法和语义的区别是什么?

Syntax 编程语言中语法和语义的区别是什么?,syntax,programming-languages,semantics,Syntax,Programming Languages,Semantics,编程语言(如C、C++)中的语法和语义有什么区别 语义是您的代码的意思——您可以在伪代码中描述它。语法是实际的结构——从变量名到分号,无所不包。语法指的是一种语言的结构,跟踪它的内容是如何组合在一起的。 例如,您可能需要先声明一个类型,然后声明一个名称,然后声明一个分号,以使代码在语法上正确 Type token; 另一方面,语义是关于意义的。 编译器或解释器可能会抱怨语法错误。你的同事会抱怨语义学。语法是关于语言的结构或语法。它回答了一个问题:我如何构造一个有效的句子?所有的语言,甚至英语

编程语言(如C、C++)中的语法和语义有什么区别

语义是您的代码的意思——您可以在伪代码中描述它。语法是实际的结构——从变量名到分号,无所不包。

语法指的是一种语言的结构,跟踪它的内容是如何组合在一起的。
例如,您可能需要先声明一个类型,然后声明一个名称,然后声明一个分号,以使代码在语法上正确

Type token;
另一方面,语义是关于意义的。
编译器或解释器可能会抱怨语法错误。你的同事会抱怨语义学。

语法是关于语言的结构或语法。它回答了一个问题:我如何构造一个有效的句子?所有的语言,甚至英语和其他人类(也称为“自然”)语言都有语法,即定义句子是否正确构造的规则

以下是一些C语言语法规则:

  • 用分号分隔语句
  • 将IF语句的条件表达式括在括号内
  • 通过用大括号括起来将多个语句分组为一个语句
  • 数据类型和变量必须在第一个可执行语句之前声明(C99.C99中删除了此功能,后者允许混合类型声明。)
语义学是关于句子的意义的。它回答了以下问题:这句话有效吗?如果是,这句话是什么意思?例如:

x++;                  // increment
foo(xyz, --b, &qrs);  // call foo
是语法上有效的C语句。但它们是什么意思?尝试将这些语句转换为可执行的指令序列是否有效?这些问题是语义学的核心

考虑第一条语句中的++运算符。首先,这样做是否有效

  • 如果x是浮点数据类型,则该语句没有任何意义(根据C语言规则),因此它是一个错误,即使该语句在语法上是正确的。
  • 如果x是指向某个数据类型的指针,则该语句的含义是“将sizeof(some data type)添加到地址x处的值,并将结果存储到地址x处的位置”
  • 如果x是标量,则该语句的含义是“将一个添加到地址x处的值,并将结果存储到地址x处的位置”

最后,请注意,某些语义不能在编译时确定,因此必须在运行时进行评估。在++运算符示例中,如果x的数据类型已经达到最大值,那么当您尝试向其添加1时会发生什么情况?另一个例子:如果您的程序试图取消引用一个值为NULL的指针,会发生什么


总之,句法是一个概念,它只关心句子是否符合语言的语法。语义学是关于句子是否具有有效的含义。

维基百科有答案。阅读&维基页面

或者想想任何一个或更多的人的工作。第一步是通过将字符串划分为词素来生成标记,然后生成一些(这是语法的一种表示)。接下来的步骤涉及转换或评估这些AST(语义)


另外,请注意,如果您定义了C的一个变体,其中每个关键字都转换为法语对应词(因此,
如果
变成
si
变成
faire
否则
变成
sinon
等等),您肯定会改变语言的语法,但是你不会改变太多的语义:用法语C编程不会更容易

语法:指语言的语法结构。。如果您正在编写c语言。您必须非常小心使用数据类型、标记[它可以是文字或类似“printf()”的符号。它有3个tok,“printf,(,)”]。同样,您必须非常小心,如何使用函数、函数语法、函数声明、定义、初始化和调用它


而语义学则涉及到句子或语句的逻辑或概念。如果你说的或写的东西不符合概念或逻辑,那么你在语义上就错了。

语法是表达式、语句和程序单元的结构或形式,而语义是这些表达式、语句和程序单元的含义语义直接从语法开始。
语法是指特定编程语言指定的代码结构/形式,但语义处理分配给符号、字符和单词的意义。

语法
编程语言是其表达式、语句和程序的形式 单位。它的语义是这些表达式、语句和程序单元的含义。例如,Java while语句的语法是

while (boolean_expr) statement
此语句形式的语义是当 表达式为true时,执行嵌入语句。然后隐式控制 返回布尔表达式以重复该过程。如果布尔表达式 如果为false,则控制转移到while构造后面的语句。

  • 您需要正确的语法来编译
  • 您需要正确的语义才能使其正常工作
了解编译器如何看待代码 通常,代码的语法和语义分析在编译器的“前端”部分完成

  • 语法:编译器为每个关键字和符号生成标记:标记包含关键字的信息类型及其在代码中的位置。 使用这些令牌