结构化操作语义

结构化操作语义

50年代是计算机语言兴起的年代,这一阶段的早期,计算机语言的设计往往要强调其"方便"的一面,而比较忽略其"严格"的一面,因而对语言的语义,甚至语法,未下严格的定义,从语言设计者和语言使用者对同一语言的语义缺乏共同的理解,造成一定程度的混乱。后来,在50年代和60年代间,面向语法的编译自动化理论研究得到了很大发展,使语法形式化研究的成果达到了实用化的地步。

    语法形式化问题基本解决以后,热门逐渐把注意力集中到语义形式化方面。60年代可以说是计算机语言形式语义学正式诞生的10年,形式语义学的四大流派皆渊源于这一时期。其中1964年被认为是操作语义学和指称语义学的诞生年代,Landin关于操作语义奠基性文章"表达式的机械化处理"和Strachey关于指称语义的奠基性文章"关于形式语义学"都问世与这一年。

    操作语义的基本思想是用抽象的方法描述语言中每一成分的执行效果,以免所描述的语义依赖于该语言实现时所用的具体计算机。通常地做法是设计一个抽象机,定义一组抽象状态,把语言的语法表示成抽象的形式。这种语义方法与语言实现道德关系比较紧密,但是很难用数学方法处理,而且对语义描述者个人使用的实现方法依赖很大。

    抽象机是操作语义的核心,它既是现实生活中具体计算机的抽象化,又是理论研究中自动机的高级化——向着直接反映高级语言语义的方向靠近。人们希望抽象机结构简单合理,便于验证语义。人们又希望抽象机功能足够强大,便于描述高级语言的语义。由此产生了两个两个复杂度,一个是抽象机本身的复杂度MC,一个是(从高级语言到抽象机语言的)翻译复杂度TC。如何恰当地组合这一对矛盾的复杂度,决定了抽象机设计的好坏。

    1981年,Plotkin提出了一种新的操作语义描述方法,称为结构化的操作语义。Plotkin的基本思想是:复合成分的操作语义应该可以归结为它的各个组成部分的操作语义。这样,在证明语义正确定性时就可以使用结构化归纳法,因此,结构化操作语义的本质是把公理化方法引入操作引入操作语义之中。

    一个语言的结构化操作语义由三部组成。第一部分是语法范畴,也即在语义描述中所用到的基本语法成分;例如,一个简单语言的语法范畴可以包括一组变量,一组常量,一组函数标识符等等。第二部分是语法规则,由于这里包括上下文有关的语法,所以也叫静态语义。一般用 s 表示s是一个合法的语言成分用表示:若s是一个合法的语言成分,则t也是一个合法的语言成分。典型例子如:

 

第三部分是动态语义,由一组规则(或称公理)组成,具体描述执行一个语言成分后状态起什么变化。规则的基本元素时组态,常用表示,意思是:当前状态为,待执行的程序是s。因此,例如,执行一个赋值语句的语义可以描述为

 

表示执行语句x:=e后,原来状态起了变化,其中x原来的值被表达式e的值代替。

    更多的规则取推理形式,例如,

    

    表示:若运行程序s的结果使s变为,状态变为,则运行程序s;t 的结果是使s;t 变为, 状态也是由变为。

    结构化操作语义简称为SOS(Structured Operational Semantics)。为了给出一个程序设计语言的SOS描述,应该同时列出三部分数据(或公式),包括:语法范畴,语言规则(含静态语义)及动态语义,以后我们简称第二部分为静态语义。

    语法范畴指的是该语言使用的所有语法符号。语法规则(静态语义)给出所有合法的语句结构,其中基本规则以公理形式给出,辅助规则以推理形式给出。动态语义以转换三元组的形式给出。

    定义1:以s表示任意语句,表示状态(此处状态可以理解为,例如,由全体(变量,值)偶构成的集合),则对偶称为一个组态,表示当前状态为,待执行语句为s,此外也称为一个组态,表示当前状态为,但是无语句可以执行。

    定义2:以e表示任意表达式,表示状态,则表示在状态之下计算表达式所得的值。

    定义3:

  1. 是一个规则,其中a为值;
  2. 是一个规则,表示从组态出发,执行一定的语句后,到达组态。当为空语句时,上式右端为;
  3. 有限多个队则的并和交仍是规则;
  4. 若和 是规则,则

 

也是规则。表示若成立,则亦成立;

  1. 在一个具体的SOS中,若某规则r恒成立,且不为上式的形式,则r称为公理。若有类如上式的规则成立,则称为推理。

定义4:三元组<C,T,R>称为一个转换三元组,其中C是全体可能的组态的集合,T是全体终结组态的集合,R是全体公里和推理的结合,简称公理集合。

    终结组态是指形式为的组态,或这样的组态,对它们不存在,使得

 

成立,并且 。

BNF是描述编程语言的文法。自然语言存在不同程度的二义性。这种模糊,不确定的方式无法精确定义一门程序设计语言。必须设计一种准确无误地描述程序设计语言的语法结构,这种严谨、简洁、易读的形式规则描述的语言结构模型称为文法。最著名的文法描述形式是由Backus定义Algol60语言时提出的Backus-Naur范式(Backus-Naur Form,BNF)及其扩展EBNF。BNF能一种简洁,灵活的方式描述语言的语法。BNF范式是一种用递归地思想来表述计算机语言符号集的定义规范,具有如下的法则:

  • ::=表示定义
  • " "双引号里的内容表示字符
  • < >尖括号里的内容表示必选内容
  • | 竖线两边的是可选内容,相当于or

现在以微型语言SL为例,说明如何用SOS来描述。下面是SL语法的BNF形式,一切细节均已略去。

<语句>::= <赋值>|<条件>|<循环>|skip|<语句>;<语句>

<赋值>::= <变量>:=<A表达式>

<条件>::= if<B 表达式> then <语句> else <语句> fi

<循环>::= while<B 表达式> do <语句> od

    下面给出它的各部分SOS描述。

  1. 语法范畴
    1. 变量集V,元素为x,y,z;
    2. A表达式集 E,元素为
    3. B表达式集,元素为 ;
    4. 语句集S,元素为s,t,u,v;
  2. 静态语义(语法规则)

 

 

 

 

  1. 动态语义(转换规则)

     

     

     

     

     

     

     

     

 

下面以一种稍微复杂的语言IMP(一种简单的命令式语言)进行说明

IMP语言的语法范畴:

N,数集,包括正整数、负整数和零,带符号位的正负十进制数的集合

T,真值集,T={true,false}

Loc,存储单元集,字母开头的字母数字串

Aexp,算术表达式集

Bexp,逻辑表达式集

Com,命令集

语法成分的元变量(约定):

n.m表示数集N中的元素

x,y表示存储单元集Loc中的元素

a表示算法表达式集Aexp中的元素

b表示逻辑表达式集Bexp中的元素

c表示命令集Com中的元素

转载于:https://www.cnblogs.com/kexinxin/p/10147201.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RISC-V Linux 启动流程分析

“Author: 通天塔 985400330qq.comDate: 2022/05/15Revisor: lzufalcon falcontinylab.orgProject: RISC-V Linux 内核剖析”说明&#xff1a;RISC-V Linux 内核兴趣小组旨在围绕 RISC-V 处理器架构系统地研究 Linux 内核以及上下栈中的技术&#xff0c;为国内 RISC-V 生态…

两个栈来实现一个队列的C++代码

转载&#xff1a;http://blog.csdn.net/stpeace/article/details/46765343 利用两个栈来实现一个队列&#xff0c; 这个问题很常见。 最关键的是要有好的思路&#xff0c; 至于实现&#xff0c; 那是很简单的事情了。 在本文中&#xff0c; 也想说说自己的思路&#xff0c; 但…

解读设计模式----单例模式(Singleton Pattern)

单例模式可以保证一个类有且只有一个实例,并提供一个访问它的全局访问点.在程序设计中,有很多情况需要确保一个类只能有一个实例.从这句话可以看出,Singleton模式的核心&#xff1a;如何控制用户使用new对一个类的实例构造器的任意调用。如何绕过常规的构造器&#xff0c;提供一…

网站开发的小知识参考(慢慢收集备用)

inetinfo.exe占用80端口的解决方法 我在本机配置PHP环境时&#xff0c;安装的时候遇到80端口被占用&#xff0c;经过查询才知道&#xff0c;原来是Inetinfo.exe占用了80端口&#xff0c;于是把Inetinfo.exe服务关掉就可以正常安装PHP环境了。解决方法在windows服务管理里&#…

Linux下如何搭建Java环境

软件环境 虚拟机&#xff1a;VMware Workstation系统&#xff1a;Linux&#xff1a;CentOS-7-x86_64工具&#xff1a; 安装工具&#xff1a;SSH客户端搭建步骤 1&#xff1a;查询当前系统版本 cat /proc/version2&#xff1a;首先确认当前系统是否已经存在java环境 java -vers…

程序中提升几毫秒、节省几 kB 的内存有必要吗?

我记得我上小学的时候有一篇课文&#xff0c;说是有一个人很节省&#xff0c;不仅他自己家里节省&#xff0c;如果别人家吃饭乱扔的剩饭&#xff0c;他都会去收拾起来晒干存起来。然后刚好有一年饥荒&#xff0c;大家都没有米吃了&#xff0c;他就把他那些年存起来的米给大家吃…

pthread_join()函数理解

pthread_t tid; 使用方式&#xff1a;pthread_join(tid,NULL); 为什么要使用pthread_join()&#xff1f; 在很多情况下&#xff0c;主线程生成并起动了子线程&#xff0c;如果子线程里要进行大量的耗时的运算&#xff0c;主线程往往将于子线程之前结束&#xff0c; 但是如果主…

SmartTemplate学习入门一

php最简单的模板 Array的变量是由SmartTemplate内建函数assign&#xff08;&#xff09;来赋值的 具体语法如下 assign ( 模版中的变量, 要替换的内容 ) 或 assign ( Array内容 ) 和其他程序的变量一样&#xff0c;smartTemplate的变量是由特殊的{}所包含的。里面的内容可以是S…

人生感言

马云说的一些话&#xff0c;还是值得思考的&#xff1a; (1)、细节好的人格局一般比较差 (2)、态度比能力重要&#xff0c;选择同样也比能力重要 (3)、领导比员工多什么&#xff1f; 领导永远不要跟下属比技能&#xff0c;下属肯定比你强&#xff1b;如果不比你强&#x…

当MCU死机了,先把硬件抓过来~

关于软件开发中的偶发性问题&#xff0c;有些处理办法看似不是很难&#xff0c;但其实最重要的还是对问题的敏感度&#xff0c;而这份敏感度就来源于你对整个系统的理解和把握。当你能够尽快缩小问题代码的范围&#xff0c;在一定程度上就已经加快了解决问题的进度。之前我曾提…

青蛙学Linux—NFS

NFS&#xff0c;Network File Syttem&#xff0c;网络文件系统。它允许网络上运行不同操作系统的主机通过网络连接到运行NFS服务的主机上&#xff0c;以实现数据共享。NFS的配置非常简单&#xff0c;经过简单的设置既能快速使用NFS。 使用NFS&#xff0c;首先在服务端运行NFS服…

extjs 学习中

首先找了个js得开发工具&#xff1a;Komodo Edit 但是安装了好多次都没有出现提示&#xff0c;均告失败&#xff01;今天再次鼓起勇气安装试试&#xff1a;首先安装Komodo-Edit-4.3.2-1263; 成功&#xff01;然后&#xff1a; 下载extjs_api_catalogs-2.0.2-ko.xpi &#xff…

火眼睛睛查coredump(stl sort)------永远让比较函数对相同元素返回false

转载&#xff1a;http://blog.csdn.net/stpeace/article/details/51040218#cpp 看看如下代码的一个非常隐晦的错误&#xff0c; 虽然不会每次core dump, 但类似代码迟早会core dump&#xff0c; 好多人遇到过。 此问题极难定位&#xff0c; 看一下吧&#xff1a; [cpp] view pl…

P1648 看守

传送门 以二维的两个点\((x1,y1),(x2,y2)\)为例&#xff0c;那么他们之间的曼哈顿距离肯定为一下四个之一\((x1-x2)(y1-y2)\),\((x2-x1)(y1-y2)\),\((x1-x2)(y2-y1)\),\((x2-x1)(y2-y1)\)&#xff0c;而且为这四个里面最大的 然后搞一搞可以变成下面的样子\((x1y1)-(x2y2)\),\(…

好友让我看这段代码

周末的时候&#xff0c;一个微信好友让我旁边看一段代码在写下面的文章之前&#xff0c;我先简单说下写代码是一件非常有意思的事情&#xff0c;同时也是一件需要我们认真对待的事情&#xff0c;我不认为一定要把代码写的和大神一样看不明白&#xff0c;但是至少要逻辑清晰&…

使用github管理Eclipse分布式项目开发

使用github管理Eclipse分布式项目开发 老关我在前面的博文&#xff08;github管理iOS分布式项目开发&#xff09;中介绍了github管理iOS分布式开发&#xff0c;今天老关将向大家介绍使用github管 理Eclipse分布式项目。事实上我们的516inc团队这在开发一个多移动平台项目&#…

愉快且卓有成效:培养你与人相处的能力

毫无疑问&#xff0c;渊博的学识和不断的创新是事业成功的基础。然而&#xff0c;把一个概念变为成果&#xff0c;离开他人的合作&#xff0c;任何人&#xff0c;无论是伟人还是凡夫&#xff0c;都无法实现。与人合作得是否愉快且卓有成效&#xff0c;完全取决于你与人相处的能…

小玩一个并行多线程MCU—MC3172

大家好转发一篇杂烩君的文章&#xff0c;杂烩君是我同一个高中的老乡&#xff0c;他平时分享的嵌入式知识非常不错。——————大家好&#xff0c;我是杂烩君。最近&#xff0c;朋友送了块小板子&#xff0c;板子上的MCU是个很有意思的东西——并行多线程处理器MC3172 。通俗…

Android 人脸识别签到(一)

因为Android课程设计自己选题&#xff0c;所以作者选了这个相对简单的。本来开始是想做大学课程查签到&#xff0c;拍一张集体照&#xff0c;就可识别哪些人已到&#xff0c;哪些未到。查了一下百度AI开发平台的人脸识别接口&#xff0c;发现V3的接口文档有M:N的人脸识别&#…

[系列文章]上传文件管理控件v2

一、引言&#xff1a; 开发v1的时候&#xff0c;遇到很多困难&#xff08;因为我是新手&#xff09;&#xff0c;于是就上网找了一些资料。 其中&#xff0c;这篇《数据绑定的总结 》文章&#xff08;http://www.cnblogs.com/qingtianyzl/articles/351012.html&#xff09;被我…