什么是语义?


13

有许多流行的语言。但是,计算机科学家告诉我们,为了确切,明确地理解那些语言的程序行为(例如证明其身份),我们需要将它们翻译成另一种易于理解的语言。他们称这种语言为“语义”。作者提出了许多语义之一。他们解释了结构的含义以及如何将语言翻译成它们。他们说,一旦您这样做,每个人都一定会理解您的程序。

看起来不错,但是我听不懂。他们是否告诉我们他们引入另一种语言来理解第一种语言?为什么我们比最初的理解得更好?为什么这种语义比这更好?为什么不立即学习C的语义而不是发明另一种语言来描述C的语义呢?语法也一样。为什么不就语法提出相同的问题?

PS在评论中,我听到语义并不意味着另一种语言或对其的翻译。但是VHDL的形式语义学说,如果您仅以一种方式理解某些东西,那么您就不会理解它,并且如果我们提供一种语言将其翻译成另一种(已知)语言的机制,则可以指定“含义的含义”。也就是说,“语义是形式系统之间的关系”。Hennessy在《编程语言语义学》中说,当语义以BNF或语法图的形式提供时,语义允许对程序“含义”进行正式处理。如果不是语言,什么是正式系统?

PS2我可以说将给定HDL程序的硬件综合成门的互连,这是语义提取的过程吗?之后,我们将(高级)描述翻译成我们理解的(低级)语言。


你是什​​么意思的图?我使用语义,但是实际上从不使用图表。
戴夫·克拉克

1
{0,1}+value(w)=i=1|w|wi2ni+1

@Dave对不起,我是在“作业决策图”的印象下创建我的问题的。我还只是VHDL的形式语义学,这是一本书,作者在其中提出了不同的语义,每个语义中都有许多图表。我以为这是我们映射到的一种语言。
2012年

这听起来似乎不像语义,而更像是编译为硬件的中间步骤。
戴夫·克拉克2012年

是的,但是他们从描述中提取了“含义”。
2012年

Answers:


15

为什么不立即学习C的语义而不是发明另一种语言来描述C的语义呢?

因为要定义C的语义,您需要某种语言,例如英语。英语可能是模棱两可的,尤其是C99语义。

语义的计算机科学概念通常是程序的数学描述,并且此描述不完全是翻译。有几种语义,可能涉及不同的事物:

  1. 关于哪个数学函数程序计算(指称语义),
    lambda x: x + x =(x2x)
  2. 关于程序前后应具有的属性(公理语义),
    {a>0} x = a; y = 0; while(1 < x){ x = x/2; y++; } {y=log(a)}
  3. 关于程序将如何减少(操作语义)。 其中表示您之前和之后的记忆。在这种情况下如果和是的存储单元,则和和,如果。
    (σ, while(x){x--;y++;})σ
    σ,σσ=(xa,yb)σ=(xa+b,y0)xyxya

现在有点可悲的是,通过程序的语义来普遍地理解程序既不容易也不是其全部目的。它不是前者,因为这些数学可能很混乱。之所以不是后者,是因为语义确实提供了一个通用且明确的描述,但它并不用于理解程序。

如果阅读语义没有多大意义,那么在语言的基本元素上阅读并达成一致就非常重要,例如,明确解释C的如何进行的原始作品。continue

结论:

他们是否告诉我们他们引入另一种语言来理解第一种语言?

从技术上讲,语言是数学。而且对于所有编程语言而言,它基本上都是相同的,因此即使引入一种新的语言(如果所有语言都相同)也可以。

为什么我们比最初的理解得更好?

因为它是数学运算,所以可能很难理解,但是它更加精确和完整。

语法也一样。

有一些关于经过验证的解析器的作品,但是解析器的语义意味着什么并非微不足道。


2
“数学更加精确和完整。” -当然是数学本身的形式语法和语义问题。;)
拉斐尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.