Operational Semantics(操作语义)直白理解

主要解释syntax(句法)、grammer(语法)、semantics(语义)等操作语义

1、syntax和grammer是语法,即句子或者短语的组成规则,规定了什么样的句子或者短语是合法的句子或短语。一个句子由主谓宾构成即最基本的语法。

2、semantics(语义)是指句子符合语法后所表达的意思。符合语法的句子不代表有合适的意思/意义。如 『苹果 操 牛』这句话 复合基本语法,但没有表达任何实际意义,我们无法理解苹果是怎么能操牛的(什么你能理解?!那你牛逼。。)。对于编程语言也是同样道理,在用parser(语法分析器)得到合法的abstract syntax tree(抽象语法树)后,我们想要理解这段程序所表达的含义是什么,也就是分析它的目的和行为,而这就是编程语言中的semantics。再说白点,semantics是一种抽象,我们在后面会发现operational semantics基本是个精简C语言,那我们为什么需要『C语言』来解释C语言呢?这是有历史原因的,C语言和罗马城一样不是一下子就有的。在C之前还是汇编的时代,那时候的汇编为了适应底层的硬件实现,还带了许多诸如出入程序栈,在寄存器之间移动这样的底层实现细节。C语言抽象了这些细节们解放了程序员。operational semantics也是同理,它抽象了语言的琐屑和实现细节(无论对象是高级语言还是汇编),类似于高级语言,用来解释程序是如何运行的。举个例子,在C语言代码中我们写的a + b是C语言的合法句法,它代表的意义即a 加上 b, 也就是说翻译过来同样是a + b,。但这俩a + b完全是俩码事了,后者翻译自前者,是前者的抽象。 

补充概念:

parser(语法分析器):通常是作为编译器解释器的组件出现的,它的作用是进行语法检查、并构建由输入的单词组成的数据结构(一般是语法分析树抽象语法树等层次化的数据结构)。语法分析器通常使用一个独立的词法分析器从输入字符流中分离出一个个的“单词”,并将单词流作为其输入。实际开发中,语法分析器可以手工编写,也可以使用工具(半)自动生成。

抽象语法树:源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。

猜你喜欢

转载自blog.csdn.net/dwj_daiwenjie/article/details/88935532
今日推荐