编程语言(如 C、C++)中 的 语法 和 语义 有什么区别?
TL; 博士
总而言之 ,句法是只关心句子是否对语言的语法有效的概念。语义是关于句子是否具有有效含义。
长答案:
语法是关于语言的 结构 或语法的。它回答了这个问题:我如何构造一个有效的句子?所有语言,甚至英语和其他人类(又名“自然”)语言都有语法,即定义句子是否正确构造的规则。
以下是一些 C 语言语法规则:
语义是关于句子的 含义 。它回答了以下问题:这句话有效吗?如果是这样,这句话是什么意思?例如:
x++; // increment foo(xyz, --b, &qrs); // call foo
是语法上有效的 C 语句。但它们是什么意思?尝试将这些语句转换为可执行的指令序列是否有效?这些问题是语义学的核心。
考虑第一条语句中的 ++ 运算符。首先,尝试这样做是否有效?
最后,请注意,某些语义无法在编译时确定,因此必须在运行时进行评估。在 ++ 运算符示例中,如果 x 已经是其数据类型的最大值,那么当您尝试将 1 添加到它时会发生什么?另一个例子:如果你的程序试图取消引用一个值为 NULL 的指针会发生什么?