一个简单语言的编译实例

一个简单语言的编译实例

ID:26463135

大小:177.00 KB

页数:22页

时间:2018-11-27

一个简单语言的编译实例_第1页
一个简单语言的编译实例_第2页
一个简单语言的编译实例_第3页
一个简单语言的编译实例_第4页
一个简单语言的编译实例_第5页
资源描述:

《一个简单语言的编译实例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一个简单语言的编译实例1语言的文法产生式集合·程序定义<程序>àprogram<标识符><分程序>.<分程序>à<变量说明><复合语句>·语句定义<变量说明>àvar<标识符表>:<类型>;<标识符表>à<标识符>,<标识符表>

2、<标识符><复合语句>àbegin<语句表>end<语句表>à<赋值语句>;<语句表>

3、<赋值语句><赋值语句>à<标识符>:=<算术表达式>·算术表达式定义<算术表达式>à<算术表达式>ω0<项>

4、<项><项>à<项>ω1<因子>

5、<因子><因子>à<算术量>

6、(<算术表达式>)<算术量>à<标识符

7、>

8、<常数>·类型定义<类型>àinteger

9、real

10、char·单词集定义<标识符>à<字母>

11、<标识符><数字>

12、<标识符><字母><常数>à<整数>

13、<实数><整数>à<数字>

14、<整数><数字><实数>à<整数>.<整数>·字符集定义<字母>àA

15、B

16、C

17、…

18、Z

19、a

20、b

21、c

22、…

23、z<数字>à0

24、1

25、2

26、3

27、4

28、5

29、6

30、7

31、8

32、9其中:ω0—+或-ω1—*或/例:·源程序:programexamplevara,b:integer;begina:=2;b:=2*5+aend.·推导过程:<程序>Þprogram<标识符><

33、分程序>.Þprogramexample<分程序>.Þprogramexample<变量说明><复合语句>.Þprogramexamplevar<标识符表>:<类型>;<复合语句>.Þprogramexamplevara,b:<类型>;<复合语句>.Þprogramexamplevara,b:integer;<复合语句>.Þprogramexamplevara,b:integer;begin<语句表>end.Þprogramexamplevara,b:integer;begin<赋值语句>;<赋值语句>end.Þprogram

34、examplevara,b:integer;begina:=2;b:=2*5+aend.·对应的目标代码程序:exampleSEGMENTaDB4DUP(0)bDB4DUP(0)tDB4DUP(0)ASSUMECS:example,DS:exampleMOVAX,2MOVa,AXMOVAX,10ADDAX,aMOVt,AXMOVAX,tMOVb,AXINT21HRETexampleENDS2关键字表和界符表编号关键字编号界符1program1,2var2:3integer3;4real4:=5char5*6begin6/7en

35、d7+8-9.10(11)3编译过程:1.词法分析和语法分析:·Token序列:(k,1),(i,1),(k,2),(i,2),(p,1),(i,3),(p,2),(k,3),(p,3),(k,6),(i,2),(p,4),(c,1),(p,3),(i,3),(p,4),(c,1),(p,5),(c,2),(p,7),(i,2),(k,7),(p,9),符号表I常数表Cexample2a5b2.语义分析:(1)(k,1),(i,1),·填写符号表:符号表Iexample程序标识符ab·生成中间代码:①(program,I1,_

36、,_)(2)(k,2),(i,2),(p,1),(i,3),(p,2),(k,3),(p,3),·填写符号表:假设整型域宽为4;符号表Iexample程序标识符,过程占用总域宽为8a变量标识符,integer,offset=0b变量标识符,integer,offset=4(3)(k,6),·无语义动作;(4)(i,2),(p,4),(c,1),(p,3),·生成中间代码:②(:=,C1,_,I2)(5)(i,3),(p,4),(c,1),(p,5),(c,2),(p,7),(i,2),·生成中间代码:③(*,C1,C2,t1)

37、④(+,t1,I2,t2)⑤(:=,t2,_,I3)·建立中间变量表:中间变量表I’t1integert2integer(6)(k,7),(p,9),·生成中间代码:⑥(end,_,_,_)中间代码序列为:①(program,I1,_,_)②(:=,C1,_,I2)③(*,C1,C2,t1)④(+,t1,I2,t2)⑤(:=,t2,_,I3)⑥(end,I1,_,_)4.优化:·优化中间代码:①(program,I1,_,_)②(:=,C1,_,I2)③(+,10,I2,t2)④(:=,t2,_,I3)⑤(end,I1,_,

38、_)·中间变量t2填入符号表:符号表Iexample程序标识符,过程占用总域宽为12a变量标识符,integer,offset=0b变量标识符,integer,offset=4t2变量标识符,integer,offset=85.目标代码生成:①(program,I1,_,_)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。