编译原理》综合训练实习报告

仗剑天涯 范文 报告范文
精选回答

编译原理》综合训练实习报告本文简介:附件二【学生用】西北农林科技大学信息工程学院《编译原理》综合训练实习报告小组成员姓名学号张浩宇2012013332黄彬2012013338郑瑞2012013343王冠2012013347姓名黄彬学号2012013338专业班级软件工程指导教师王美丽实践日期2014年6月30日-7月4日目录一、综合训

编译原理》综合训练实习报告本文内容:

附件二

【学生用】

西北农林科技大学信息工程学院

《编译原理》综合训练实习报告

小组成员

张浩宇

2012013332

黄彬

2012013338

郑瑞

2012013343

王冠

2012013347

姓名

黄彬

学号

2012013338

专业班级

软件工程

指导教师

王美丽

实践日期

2014年6月30日-7月4日

一、综合训练目的与要求1

二、综合训练任务描述1

三、编译系统设计1

五、调试与测试1

六、实习日志1

七、实***结1

八、附录:核心代码清单1

一、综合训练目的与要求

本综合训练是软件工程专业重要的实践性环节之一,是在学生学习完《编译原理》课程后进行的综合练习。本课综合训练的目的和任务:

1.

巩固和加深学生对编译原理课程基本知识的理解和掌握;

2.

提高抽象思维能力以及加深理解编译系统的原理;

3.

掌握利用JavaCC开发编译系统的方法;

4.

掌握书写设计与实现编译系统说明文档的能力;

5.

提高综合运用算法、程序设计语言、数据结构知识的能力。

二、综合训练任务描述

根据组长的安排,我主要负责的任务是for循环语句的翻译,包括词法分析,语法分析和语义分析。

能够根据单词的构词规则,完成for语言中的单词的解析(词法分析),如果不符合单词的构词规则,请给出错误信息。如果源语言符合单词的词法规则,请输出二元式。

在词法分析的基础上,构造for的LL(1)文法,利用JavaCC实现LL(1)文法,判断源语言是否符合MiniC的语法,如果不符合,请给出语法错误信息。

在语法分析的基础上,根据属性文法制导翻译,进行语义分析,输出四元式。如果源语言不符合for的语义,请指出错误信息。

三、编译系统设计

(1)五大类的单词

关键字:由程序语言定义的具有固定意义的标识符。

标识符:用来表示各种名字,如变量、数组名、过程名等等。

常数:类型一般有整型,实型,布尔型等等。

运算符:如+、-、*、/等。

界符:如逗号,分号,括号,/*?*/等等

(2)

LL(1)文法的描述

LL(1)文法满足:

a、

文法不含左递归;

b、

对于文法中每一个非终结符的各个产生式的候选首符集两两不相交;

c、

对文法中的每一个非终结符A,若它存在某个候选首符集包含ε,则

FIRST(A)∩FOLLOW(A)=Φ

(3)

for语句语法

void

forstate()

:

{}

{

“(“(fuzhistate())?“;“(boolbiaodashi())?“;“(fuzhistate())?

“)“Expression_Blocks()

其中,fuzhistate()表示的是赋值语句,也就是for语句的初始化语句,如:i

=

0;boolbiaodashi()是表示for语句中的条件判断部分,条件为真则继续循环,为假则跳出循环,如:i

“(“(

fuzhistate()

{

quad

=

Snode.innerIdSeqen

+

1;

}

)?

“;“(

boolbiaodashi()

)?

“;“(

fuzhistate()

{

quad1

=

Snode.innerIdSeqen

+

1;

}

)?

“)“Expression_Blocks()

{

Slist.addSnode(new

Snode(“J“,“_“,“_“,quad));

Snode

backFill

=

Slist.get(jump

-

1);

String

nxq

=

““+

(Snode.innerIdSeqen

+

1);

backFill.setResult(nxq);

}

}

void

fuzhistate()

:

{

Token

f,node

=

null;

Token

m;

String

middle;

String

newTemp1,newTemp2;

int

D

=

0;

String

IDE

=

null;

String

s;

}

{

(

f

=

(“[“node

=

{

D++;

}

“]“)*

(

(

“=“middle

=

biaodashi()

{

qtTable.addSnode(new

Snode(“=“,middle,“_“,f.image));

}

)

|

(

(

{

qtTable.addSnode(new

Snode(“+“,f.image,“1“,f.image));

}

)

|

(

{

qtTable.addSnode(new

Snode(“-“,f.image,“1“,f.image));

}

)

)

)

{

IDE

=

f.image;

if

(!myNodeList.isExientence(IDE))

{

s

=

“变量“+

IDE

+

“未声明,错误“+

“\n“;

//

System.out.println(s);

S

+=

s;

s

=

null;

//System.exit(-

1);

}

}

)

|

(

m

=

f

=

{

qtTable.addSnode(new

Snode(“+“,f.image,“1“,f.image));

IDE

=

f.image;

if

(!myNodeList.isExientence(IDE))

{

s

=

“变量“+

IDE

+

“未声明,错误“+

“\n“;

//

System.out.println(s);

S

+=

s;

s

=

null;

//System.exit(-

1);

}

}

)

|

(

m

=

f

=

{

qtTable.addSnode(new

Snode(“-“,f.image,“1“,f.image));

IDE

=

f.image;

if

(!myNodeList.isExientence(IDE))

{

s

=

“变量“+

IDE

+

“未声明,错误“+

“\n“;

//

System.out.println(s);

S

+=

s;

s

=

null;

//System.exit(-

1);

}

}

)

}

void

boolbiaodashi()

:

{}

{

andboolbiaodashi()

(

andboolbiaodashi()

)*

}

void

andboolbiaodashi()

:

{}

{

notboolbiaodashi()

(

notboolbiaodashi()

)*

}

void

notboolbiaodashi()

:

{}

{

()?

guanxibiaodashi()

}

int

guanxibiaodashi()

:

{

String

node;

int

nxq;

String

first;

String

middle;

}

{

first

=

biaodashi()

(

node

=

guanxifu()

middle

=

biaodashi()

{

nxq

=

Snode.innerIdSeqen

+

1;

//

因为没有布尔运算,真出口已经确定

Slist.addSnode(new

Snode(“J“+

node,first,middle,nxq

+

2));

return

nxq

+

1;

//返回(j,_,_,0)的四元式标号

}

)?

}

String

guanxifu()

:

{

Token

t;

}

{

(

t

=

|

t

=

|

t

=

|

t

=

|

t

=

|

t

=

)

{

return

t.image;

}

}

String

biaodashi()

:

{

String

first;

String

middle;

String

newTemp;

}

{

first

=

term()

{

newTemp

=

first;

}

(

middle

=

term()

{

newTemp

=

VariableNameGenerator.genVariableName();

Slist.addSnode(new

Snode(“+“,first,middle,newTemp));

}

|

middle

=

term()

{

newTemp

=

VariableNameGenerator.genVariableName();

Slist.addSnode(new

Snode(“-“,first,middle,newTemp));

}

)*

{

return

newTemp;

}

}

String

term()

:

{

String

first;

String

middle;

String

newTemp;

}

{

first

=

unary()

{

newTemp

=

first;

}

(

middle

=

unary()

{

newTemp

=

VariableNameGenerator.genVariableName();

Slist.addSnode(new

Snode(“*“,first,middle,newTemp));

}

|

middle

=

unary()

{

newTemp

=

VariableNameGenerator.genVariableName();

Slist.addSnode(new

Snode(“/“,first,middle,newTemp));

}

)*

{

return

newTemp;

}

}

String

unary()

:

{

String

str;

Token

node;

String

IDE;

String

s

=

null;

}

{

node

=

{

return

node.image;

}

|

“(“str

=

biaodashi()

“)“{

return

str;

}

|

(

node

=

{

Slist.addSnode(new

Snode(“+“,node.image,“1“,node.image));

IDE

=

node.image;

if

(!myNodeList.isExientence(IDE))

{

s

=

“变量“+

IDE

+

“未声明,错误“+

“\n“;

S

+=

s;

s

=

null;

}

}

)

|

(

node

=

{

qtTable.addSnode(new

Snode(“-“,node.image,“1“,node.image));

IDE

=

node.image;

if

(!myNodeList.isExientence(IDE))

{

s

=

“变量“+

IDE

+

“未声明,错误“+

“\n“;

S

+=

s;

s

=

null;

}

}

)

|

(

LOOKAHEAD(2)

node

=

{

IDE

=

node.image;

if

(!myNodeList.isExientence(IDE))

{

s

=

“变量“+

IDE

+

“未声明,错误“+

“\n“;

S

+=

s;

s

=

null;

}

return

node.image;

}

|

(

node

=

(

“++“|

“--“)

{

IDE

=

node.image;

if

(!myNodeList.isExientence(IDE))

{

s

=

“变量“+

IDE

+

“未声明,错误“+

“\n“;

S

+=

s;

s

=

null;

}

}

)

)

}

12

凌鼎圣风 2022-07-24 03:30:05

相关推荐

艺术生集训注意事项有哪些 需要注意什么

艺术生在集训的时候也要同步文化课学习,夯实文化基础。考生在专业课集训期间,文化课千万不要丢,专业课和文化课的学习一定要兼顾。艺术生集训的注意事项一定要选择一个靠谱的培训学校。因为一个好的培训学校,懂得怎么以最快...
展开详情

艺术生什么时候集训好 有必要去集训吗

艺术生集训指的是艺术类学生在完成学业水平测试之后,由学校或自己向学校申请,暂时停掉学校的文化课,到专业的艺术培训学校进行封闭式训练,直到校考结束。美术生集训时间美术生集训,通常从高二下学期开始,5月份开始报名,...
展开详情

提高生物成绩的方法是什么 窍门有哪些

即通过分析教材,找出要点,将知识简化成有规律的几个字来帮助生物知识记忆。例如DNA的分子结构可简化为“五四三二一”,即五种基本元素、四种基本单位、每种基本单位有三种基本物质、很多基本单位形成两条脱氧核酸链、成为...
展开详情

艺考生集训注意事项 有什么要了解知道的

艺术生集训不要忽略了文化课,作为艺术生必须要做到文化课和专业课双赢,才能被心中理想大学录取,在这期间需要付出很大的努力。文化课也是非常重要的,不要忽略文化课,要一直学习专业课。艺考生集训注意什么学会针对性强化技...
展开详情

投档会参考学考成绩吗 学考成绩有什么用

将成绩符合的学生的档案投给招生院校。这就是投档,投档不参考于学生的其他条件,只参考他的总成绩和志愿。而根据学校的调档比例省教育考试院确定他的投档比例,只要学生的档案被投档,决定他是否被录取的因素就会包含他的学考...
展开详情

精选推荐更多>

国泰民安的泰的意思

国泰民安的泰的意思是平安,安定。成语的意思是国家太平,人民生活安定。出自宋·吴自牧《梦粱录·山川神》:“每岁海潮太溢,冲激州城,春秋醮祭,诏命学士院,撰青词以祈国泰民安。”
成语用法:用于褒义,常与“风调雨顺”连用。
近义词:河清海晏、政通人和。
反义词:兵荒马乱、兵连祸结、民不聊生。
示例:
1、《汉书·刑法志》:“至今桓公任用管仲;而国富民安。”
2、老舍《龙须沟》第一章:“有一天,沟不臭,水又清,国泰民安享太平。”
3、《中国青年报》1985.10.1:“然而不管怎么说,饱经忧虑的中国人民毕竟盼来了物丰民富,国泰民安的好日子。”

盾牌是什么意思

“盾牌”是古代作战时一种手持格挡,用以掩蔽身体,抵御敌方兵刃、矢石等兵器进攻的防御性兵械,呈长方形或圆形,盾的中央向外凸出,形似龟背,内面有数根系带,称为“挽手”,以便于抓握;比喻掩盖、推托的借口;《圣经》诗篇:“列邦的君王聚集要作亚伯拉罕之神的民因为世界的盾牌是属神的,他为至高!”盾牌意为君王。
出处:
1、沈从文《从文自传·一个老战兵》:“他们常常是一人手持盾牌单刀,一人使关刀或戈矛,照规矩练‘大刀取耳’、‘单戈破牌’或其他有趣厮杀题目。”
2、冰心《六一姊》:“我知道是她自己要看,却拿我作盾牌。”
在古代东方,以及古希腊、古罗马等具有古老历史的国家,作战时都广泛使用盾牌。公元前两千年出现了铜盾,后来又出现了铁盾。盾牌的表面一般都包有一层或者是数层皮革,可以防止箭、矛和刀剑的攻击。通常还绘有各种彩色的图案、标志、徽章等等。随着枪炮火药等兵器的发展,盾牌逐渐被废弃。
盾虽然只能用以防御,但常配以刀枪,也能发挥很大的进攻能力。用法主要有:腾、跌、扑、滚、伏、窜、踔、蹲等。
盾牌作为武术套路较为流行的有:矛、盾对打、盾牌刀进棍、盾牌刀进枪、三节棍进盾刀等。

觉得是动词吗

“觉得”是动词,指感觉到,意识到。
出处:
1、《朱子语类》:“每常处事,或思虑之发,觉得发之正者心常安,其不正者心常不安。”
2、《水浒传》:“默然觉得神思恍惚,寝食不安。”
造句:
1、你的脸色很难看,觉得哪儿不舒服吗?
2、你觉得心里不痛快,就尽情地哭一场吧!
3、看见穿短裙就觉得人家作风不好,真是少见多怪。
4、大家都觉得这部电影很有意思。
5、讲完课后他觉得舌敝唇焦。
6、穿上妈妈做的衣服,觉得挺舒服的。
7、他觉得他现有的工作非常称心。
8、妈妈觉得家里还应该购置一些家具。
9、由于他平时不留心观察事物,作文时就觉得没什么可写的。

文艺性说明文的特点是什么

文艺性说明文的特点是:
1、短小精练,也可称千字文,一篇集中说明一个问题,具有“小品”的特点。
2、资料可靠,数据确凿,力求知识的科学性。
3、文笔轻松、活泼、生动、形象,颇有文采,可叙述,也可描写。
4、题材新颖、适时,是广大读者所关心的问题。
5、语言深入浅出,通俗易懂,多用比喻、拟人等修辞手法,把科学融入艺术之中,富有情趣,引人入胜。
文艺性说明文,即科学小品,是说明文的一种,它与其他说明文不同之处,是采用了文学的表现手法。文学是其手段,传播科学知识才是其目的。这类说明文,以说明的表达方式为主,还辅以叙述、描写、议论甚至抒情等多种表达方式。为了增强文艺性,有时娓娓地讲段故事,有时绘声绘色地写段风景。
常见热点问答
热点搜索
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200
作文大全
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200