Chinaunix首页 | 论坛 | 博客
  • 博客访问: 190392
  • 博文数量: 2
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 500
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-31 12:58
文章存档

2009年(2)

分类: C/C++

2009-08-03 16:51:42

操作语义

计算机语言的操作语义是这样理解的: 语言的含义是有语言的实施(编译器)决定的,一旦实施确定下来,语言的含义也就确定了,语言的实施就是对计算机系统的操作,因而操作语义的名称就由此而来。由于要研究一般性,故而计算机系统应该是抽象的机器,下面就用一个简单的机器“栈-状态-控制”机器为例说明一个简单语言 FLOW的操作语义

 

FLOW语言是很简单的语言,但却有能力成为所有语言,呵呵,花哨的包装会让程序员觉得语言更易用,但是对于机器来说没有区别,呵呵,就如计算机发展半个世纪,却始终摆脱不了图灵理论的计算局限。。。貌似远了,回到FLOW语言和“栈-状态-控制”机器。

FLOW语言的语法:

1)  原子语句集 Asts,A表示其中元素;

2)  布尔表达式 Bexp,用B表示

3)  语句S:=skip|A|SS|if B then S else S|(while B do S)

 

这里不管原子语句,反正就是语句(比如赋值语句等),布尔表达式和平常一样理解,但也不给出具体形式,不然怎么叫抽象呢,呵呵

 

说完语句了来说机器

“栈-状态-控制”机器 包含3部分: 控制部分c,记载程序变元当前状态s,栈,记载中间结果st。三元组(sts,c)构成了机器的一个快照,又叫一个状态,或者大状态,不管什么名词,反正这个三元组代表了机器现在所处的一个状态。

 

语言的操作语义就是操作机器 从一个状态到另一个状态,故而叫操作语义(个人理解哈)下面我们要看看FLOW对该机器的操作语义。

控制语句ifwhile对机器的操作

一)分析:

1)(sts,(if B then S1 else S2c=>S2:S1:stsB if c

红色部分是说明部分,类似于注释,=>表示状态间的转移,可见if语句对该机器的操作语义,S1S2是中间结果,布尔表达式B还没有求出来,所以我们需要求值操作,该操作我们抽象的定义为Bexp{T,F}的映射,用B.』表示

2while语句(sts(while B do S)=>skipS(while B do S):stsB while c

 

二)下面应该是求值B,上面已经说过了,用B.』表示

三)最后就是执行了,呵呵,对机器的操作产生了效果呢,我们看看机器如何执行的。下面都是针对c=c1,或c=c1=NULL的形式

1)(st,s,skip c=>(st,s,c1)

2)(st,s,Ac=>(st,A.』(s),c1) ,A.』表示对原子表达式的求值,不给出具体形式

3)(ttS2:S1:sts if c=>(st,s,S1c)

(4) ffS2:S1:sts if c=>(st,s,S2c)

5while…

6while….不写了,

呵呵,到目前为止我们定义了解释执行FLOW程序的一个抽象机器,也就给出了FlOW语言的一种操作语义,这就是操作语义啦,是不是很没意思啊!感兴趣的可以用FLOW写个小程序,给出其对机器的操作过程(一系列的状态转移….

 

PS:blog里面居然没有计算机理论这个分类 ,我把它分到C语言里了,汗一下!

阅读(2189) | 评论(0) | 转发(0) |
0

上一篇:系统调用专项研究

下一篇:没有了

给主人留下些什么吧!~~