Ric*_*ber 23 theory compiler-construction
这是Eric Lippert博客的一句话:
鉴于这种不幸的情况,首先强调存储机制,然后再强调语义是有道理的 .
很容易得到字典定义 "语义"的意思,但它在计算机术语方面意味着什么?
Kon*_*lph 26
但就计算机术语而言,它意味着什么?
基本上是一样的.例:
x = 5;
Run Code Online (Sandbox Code Playgroud)
以上是语法(表示).这个术语的含义(即语义)是将值5赋给一个被称为的符号(变量,无论如何)x.不同的语言提供不同的语法来提供相同的语义.例如,上面的赋值将被写为
x := 5;
Run Code Online (Sandbox Code Playgroud)
在Pascal,和
x <- 5
Run Code Online (Sandbox Code Playgroud)
用其他几种语言.在所有情况下,含义基本相同.但有时,相同的语法也可能具有不同的含义,具体取决于语言和/或上下文.例如,VB将equals运算符重新定义为两个不同的东西.首先是一项任务,如上所述.
其次,在下面的代码片段中,它不是分配,而是采用比较两个值的含义:
If x = 5 Then Console.WriteLine("x is 5")
Run Code Online (Sandbox Code Playgroud)
字典定义适用.
语义是(是?)所有关于词的含义.
例如,如果使用.NET类型KeyValuePair来表示除键和值之外的其他内容,则会出现语义问题.它可能有用......它可能是最好的解决方案,但它在语义上并不准确.
这正是他在博客文章中所谈论的内容.我们首先用C语言列出返回类型,但实际上返回是最后的.这在语义上是不准确的.
就编程语言术语而言,有几种语义概念:
静态语义告诉您哪些语法程序也格式正确。许多语言要么没有静态语义(方案,Ruby,Python,Icon,Lua,Perl),要么具有主要与实现类型系统有关的静态语义(Java,C,C#,Haskell)。“使用前需要声明”是另一种可能的静态语义。静态语义回答问题“ 该程序有意义吗? ”,并且在编译时会这样做。
动态语义告诉您以下两件事之一:
如果您在手册或文章中读到“语义”一词,并且上下文是非正式的英语而不是精确的数学描述,那么作者可能指的是动态操作行为-如果您愿意,则是对操作语义的非正式描述。这种非正式的描述对于编译器作者和程序员可能非常有帮助。