信息工程学院编译原理实习指导书老版综述.docx

上传人:b****6 文档编号:7688508 上传时间:2023-05-11 格式:DOCX 页数:8 大小:316.43KB
下载 相关 举报
信息工程学院编译原理实习指导书老版综述.docx_第1页
第1页 / 共8页
信息工程学院编译原理实习指导书老版综述.docx_第2页
第2页 / 共8页
信息工程学院编译原理实习指导书老版综述.docx_第3页
第3页 / 共8页
信息工程学院编译原理实习指导书老版综述.docx_第4页
第4页 / 共8页
信息工程学院编译原理实习指导书老版综述.docx_第5页
第5页 / 共8页
信息工程学院编译原理实习指导书老版综述.docx_第6页
第6页 / 共8页
信息工程学院编译原理实习指导书老版综述.docx_第7页
第7页 / 共8页
信息工程学院编译原理实习指导书老版综述.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

信息工程学院编译原理实习指导书老版综述.docx

《信息工程学院编译原理实习指导书老版综述.docx》由会员分享,可在线阅读,更多相关《信息工程学院编译原理实习指导书老版综述.docx(8页珍藏版)》请在冰点文库上搜索。

信息工程学院编译原理实习指导书老版综述.docx

信息工程学院编译原理实习指导书老版综述

编译原理实验指导书

 

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

2017年3月7日

 

实习一词法分析

一、实验目的:

1.熟悉Javacc工作原理,掌握词法分析相关的类:

Token:

表示单词的类。

每个Token对象的主要成员:

intkind表示单词的种别;Stringimage存储了token所代表的内容;intbeginLine表示单词所处的行;intbeginColumn表示单词所处的列。

TokenManager:

词法分析器,用来识别源程序中的单词序列。

SimpleCharStream:

词法分析器的输入流。

可以指定源程序来自于标准输入还是文件。

TokenMgrError:

词法错误类,当识别到非法单词时,弹出的错误对象。

Constants:

保存已定义所有单词的接口,针对每种单词定义其对应的种别码。

2.使用以上的类,编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。

并依次输出各个单词的内部编码及单词符号自身值。

二、实验预习提示

1.词法分析器的功能和输出格式

词法分析器的功能是读入源程序,输出单词序列。

词法分析器的单词常表示成二元式:

(单词种别码,单词在源代码中的字符串)。

2.词法分析器需要把对象语言的词法规则全部描述出来,在这我们取C语言子集,它的词法定义如下:

(1)关键字KEYWORD

ifelseintreturnvoidwhile……..所有的关键字都是小写。

(2)标识符IDENTIFIER

标识符的定义采取正则表达式定义方式,标识符由字母、数字、下划线“_”组成,并且首字母不能是数字。

(3)分隔符SEPARATER

;,{}[]()

(4)运算符OPERATOR

+-*/><=

(5)常数CONSTANT

简化为只表示整型常数。

(6)词法分析过滤的字符

空格“”、制表符“\t”、回车“\r”和换行符“\n”。

三、实验过程和指导:

1.准备

编译原理的实习借助的javacc插件版本是1.5.33,要求jdk版本是1.7。

请提前安装调试好。

2.新建一个用于javacc编辑的jj模板文件:

(1)新建java项目

(2)建立一个词法分析包(例如:

packagelexical)

(3)在lexical包内,“新建”-“其它”-“JavaCCTemplateFile”

(4)创建一个“.jj”文件,如图1所示:

图1新建jj模板文件

3.在模板文件中修改第三部分,将“二、实验预习提示”部分的词法规则写入。

图2jj模板文件格式

4.在熟悉词法分析器工作原理的基础上,在main方法中编写词法分析程序,并输出单词序列。

要求:

准备好多组测试源程序。

四、程序输入/输出示例:

图3测试源代码

图4词法分析输出1

对照图3,图4显示了词法输出的二元组序列(单词种别码,单词在源代码中的字符串)。

图4中最后一行提示词法错误的原因是

实验二语法分析

一、实验目的:

   设计MiniC的上下文无关文法,利用JavaCC生成调试递归下降分析程序,以便对任意输入的符号串进行分析。

本次实验的目的主要是加深对递归下降分析法的理解。

二、语法分析器:

按照MiniC语言的语法规则检查词法分析输出的记号流是否符合这些规则,并根据这些规则所体现出的语言中的各种语法结构的层次性。

把规则写入到JavaCC的.jjt文件中,可以生成树状的层次结构。

三、JavaCC:

在JavaCC的文法规范文件中,不仅可以描述语言的语法规范,而且可以描述词法规范,本次实习中,利用JavaCC以MiniC语言构造一个不含语义分析的编译器前端,包括词法分析、语法分析,并要考虑语法分析中的错误恢复问题。

通过使用JavaCC,可以体会LL(k)文法的编写特点,掌握编写JavaCC文法规范文件的方法。

内容:

利用JavaCC生成一个MiniC的语法分析器;

要求:

1.用流的形式读入要分析的C语言程序,或者通过命令行输入源程序。

2.具有错误检查的能力,如果有能力可以输出错误所在的行号,并简单提示

3.如果输入的源程序符合MiniC的语法规范,输出该程序的层次结构的语法树

具体实施步骤如下:

1.把MiniC转换为文法如下

〈程序〉→intmain(){〈语句块〉*}

〈语句块〉→〈语句〉|{〈语句串〉*}

〈语句〉→〈顺序语句〉|〈条件语句〉|〈循环语句〉

〈顺序语句〉→〈声明语句〉|〈赋值语句〉

〈赋值语句〉→ID=〈表达式〉

〈条件语句〉→if〈条件〉〈语句块〉

〈循环语句〉→while〈条件〉〈语句块〉

〈条件〉→(〈表达式〉〈关系符〉〈表达式〉)

〈表达式〉→〈表达式〉〈运算符〉〈表达式〉|(〈表达式〉)|ID|NUM

(也可以使用javacc自动生成的表达式Expression的文法)

〈运算符〉→+|-|*|/

〈关系符〉→<|<=|>|>=|==|!

=

2.在eclipse环境下完成JavaCC的插件安装后,写一个JavaCC文法规范文件(扩展名为jj)

3.完成的功能包括词法分析,语法分析(输出语法树),能够读文件,也能够把输出的结果保存文件中,可以把树的层次结果输出到文件中。

实验三语义分析

一、实习目的

通过上机实习,加深对语法制时翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。

二、实习要求

采用递归下降语法制导翻译法对算术表达式、赋值语句、条件语句、循环语句进行语义分析生成四元式序列。

实习的输入和输出(举例)

1.输入语法分析提供的正确的单词串,输出四元式序列。

例如:

对于语句串:

floatr,h,s;

s=2*3.1416*r*(h+r)

2.输出的四元式序列如下:

(1)(*,2,3.1416,T1)

(2)(*,T1,r,T2)

(3)(+,h,r,T3)

(4)(*,T2,T3,T4)

(5)(=,T4,_,s)

3.实习内容:

以下三个内容难度不同,三选一实现即可。

(1)写出一个源程序中仅包含if…else,if语句的语法分析。

要求能分析其自身嵌套。

(2)写出一个源程序中仅包含while语句的语法分析。

求能分析其自身嵌套。

(3)写出一个源程序中包含while语句、if-else、if语句的语法分析。

要求能分析其自身嵌套。

注意:

(1)对条件的判断只需要实现关系表达式即可,不需要实现布尔表达式的翻译;

(2)“嵌套”功能的实现依赖于文法。

如果:

<语句>=>…=>(推到得到)

〈if语句〉→if〈条件〉〈语句〉(产生式)

则有:

=>…=>if〈条件〉if〈条件〉〈语句〉

即,会自动实现嵌套功能。

测试代码:

 

voidmain(){

while(a+2

while(c>d){

a=b+1;

c=7;

}

}

结果:

1:

(+,a,2,T1)

2:

(J<,T1,b,4)

3:

(J,_,_,11)

4:

(J>,c,d,6)

5:

(J,_,_,10)

6:

(+,b,1,T2)

7:

(=,T2,_,a)

8:

(=,7,_,c)

9:

(J,_,_,4)

10:

(J,_,_,1)

voidmain(){

if(a+2>3){

b=6;

}

elseif(b>7){

c=a+b;

d=0;

}

}

结果:

1:

(+,a,2,T1)

2:

(J>,T1,3,4)

3:

(J,_,_,6)

4:

(=,6,_,b)

5:

(J,_,_,11)

6:

(J>,b,7,8)

7:

(J,_,_,11)

8:

(+,a,b,T2)

9:

(=,T2,_,c)

10:

(=,0,_,d)

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2