编程语言的语法和语义有什么区别?

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

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

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

  • 用分号分隔语句
  • 用圆括号括住IF语句的条件expression式
  • 用花括号将多个语句分组成单个语句
  • 数据types和variables必须在第一个可执行语句之前声明(在C99。C99中删除了此function,后者允许混合types声明)。

语义是关于句子的意思 。 它回答了这个问题:这句话有效吗? 如果是的话,这个句子是什么意思? 例如:

x++; // increment foo(xyz, --b, &qrs); // call foo 

是语法上有效的C语句。 但是他们是什么意思? 试图将这些语句转换为可执行的指令序列甚至是有效的吗? 这些问题是语义学的核心。

在第一个语句中考虑++运算符。 首先,这是否是有效的呢?

  • 如果x是一个float数据types,那么这个语句没有意义(根据C语言规则),因此即使语句在语法上是正确的,也是错误的。
  • 如果x是指向某种数据types的指针,则语句的含义是“将sizeof( 某些数据types )添加到地址x的值,并将结果存储到地址x的位置”。
  • 如果x是标量,则语句的含义是“将地址x的值加1,并将结果存储到地址x的地址”。

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

总而言之,语法是仅关注语句是否对语言的语法有效的概念。 语义是关于这个句子是否有一个有效的含义。

语法指的是一种语言的结构,追溯它的词源到事物如何在一起。
例如,您可能需要将代码放在一起,方法是声明一个types,然后是一个名称,然后是一个分号,在语法上是正确的。

 Type token; 

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

语义是你的代码意味着什么 – 你可能用伪代码来描述。 语法是实际的结构 – 从variables名到分号的所有内容。

维基百科有答案。 阅读语法(编程语言)和语义(计算机科学) wikipages。

或者考虑任何编译器或解释 器的工作。 第一步是词法分析 ,其中通过将string分成词位然后parsing来生成标记,其构build一些抽象语法树 (这是语法的表示)。 接下来的步骤涉及转换或评估这些AST(语义)。

另外,要注意的是,如果你定义了一个C的变体,其中每个关键字都被转换成了它的法语等价物(所以if变成si ,变成faire ,变成sinon等等),你肯定会改变你的语言的语法,你不会改变太多的语义:在这个法语-C编程将不会更容易!

语法是expression式,语句和程序单元的结构或forms,但是语义是这些expression式,语句和程序单元的含义。 语义直接来自语法语法是指特定编程语言指定的代码的结构/forms,而语义则处理赋予符号,字符和单词的含义。

语法:指语言的语法结构。如果您正在编写c语言。 你必须非常小心地使用数据types,令牌(它可以是文字或象“printf()”的符号。 它有3个tokes,“printf,(,)”]。 同样,你必须非常小心,如何使用函数,函数语法,函数声明,定义,初始化和调用它。

在语义上,它关系到句子或语句的逻辑或概念。 如果你用概念或逻辑说出或写出某些东西。 那么,你语义错误。