编译原理实验报告.doc

上传人:聆听****声音 文档编号:698986 上传时间:2023-04-29 格式:DOC 页数:26 大小:517.64KB
下载 相关 举报
编译原理实验报告.doc_第1页
第1页 / 共26页
编译原理实验报告.doc_第2页
第2页 / 共26页
编译原理实验报告.doc_第3页
第3页 / 共26页
编译原理实验报告.doc_第4页
第4页 / 共26页
编译原理实验报告.doc_第5页
第5页 / 共26页
编译原理实验报告.doc_第6页
第6页 / 共26页
编译原理实验报告.doc_第7页
第7页 / 共26页
编译原理实验报告.doc_第8页
第8页 / 共26页
编译原理实验报告.doc_第9页
第9页 / 共26页
编译原理实验报告.doc_第10页
第10页 / 共26页
编译原理实验报告.doc_第11页
第11页 / 共26页
编译原理实验报告.doc_第12页
第12页 / 共26页
编译原理实验报告.doc_第13页
第13页 / 共26页
编译原理实验报告.doc_第14页
第14页 / 共26页
编译原理实验报告.doc_第15页
第15页 / 共26页
编译原理实验报告.doc_第16页
第16页 / 共26页
编译原理实验报告.doc_第17页
第17页 / 共26页
编译原理实验报告.doc_第18页
第18页 / 共26页
编译原理实验报告.doc_第19页
第19页 / 共26页
编译原理实验报告.doc_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

编译原理实验报告.doc

《编译原理实验报告.doc》由会员分享,可在线阅读,更多相关《编译原理实验报告.doc(26页珍藏版)》请在冰点文库上搜索。

编译原理实验报告.doc

编译原理实验报告

编译原理

实验报告

专业班级:

姓名:

学号:

日期:

实验一词法分析程序设计与实现

一、实验目的

加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。

二、实验内容

自定义一种程序设计语言,或者选择已有的一种高级语言,编制它的词法分析程序。

词法分析程序的实现可以采用任何一种编程语言和编程工具。

从输入的源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、界符。

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

(遇到错误时可显示“Error”,然后跳过错误部分继续显示)

三、实验步骤

1.定义目标语言的可用符号表和构词规则;

2.依次读入源程序符号,对源程序进行单词切分和识别,直到源程序结束;

3.对正确的单词,按照它的种别以<种别码,值>的形式保存在符号表中;

4.对不正确的单词,做出错误处理。

四、实验结果

实验源代码:

运行效果:

五、结果分析以及感受

1、实验中需要识别的词

1. 关键字:

DIM、IF、DO、STOP、END单词种别码为1.2.3.4.5。

2.标识符;单词种别码为6。

3.常数为无符号整形数;单词种别码为7。

4.运算符包括:

=、-、*、**单词种别码为8.9.10.11。

5.分隔符包括:

、(、);单词种别码为12.13.14。

2、设计思路

这里以开始定义的C++语言子集的源程序作为词法分析程序的输入数据。

在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查、填适当的信息表。

经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格:

常数表和标识符表,它们分别包含了源程序中的所有常数和所有标识符。

1.定义部分:

定义常量、变量、数据结构。

2.初始化:

从文件将源程序全部输入到字符缓冲区中。

3.取单词前:

去掉多余空白。

4.取单词:

利用实验一的成果读出单词的每一个字符,组成单词,分

5.析类型。

6.显示结果。

3、实验感受

通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用某种高级语言(例如C++语言)直接编写此法分析程序。

另外,也让我重新熟悉了C++语言的相关内容,加深了对C++语言的用途的理解。

实验二递归下降分析法设计与实现

一、实验目的

根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。

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

二、实验内容

程序输入/输出示例(以下仅供参考):

对下列文法,用递归下降分析法对任意输入的符号串进行分析:

(1)E-TG

(2)G-+TG|—TG

(3)G-ε

(4)T-FS

(5)S-*FS|/FS

(6)S-ε

(7)F-(E)

(8)F-i

输出的格式如下:

(1)递归下降分析程序,编制人:

姓名,学号,班级

(2)输入一以#结束的符号串(包括+—*/()i#):

在此位置输入符号串例如:

i+i*i#

(3)输出结果:

i+i*i#为合法符号串

备注:

输入一符号串如i+i*#,要求输出为“非法的符号串”。

注意:

1.表达式中允许使用运算符(+-*/)、分割符(括号)、字符I,结束符#;

2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好)。

三、实验要求:

1.对语法规则有明确的定义;

2.编写的分析程序能够对实验一的结果进行正确的语法分析;

3.对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;

四、实验结果

1.程序源代码//其中的词法分析cffx()函数在实验一中已经给出

2.实验结果

五、实验分析以及感想

1文法

(1)E->TG

(2)G->+TG|-TG

(3)G->ε

(4)T->FA

(5)A->*FA|/FA

(6)A->ε

(7)F->(E)

(8)F->i

2程序思路

0.定义部分:

定义常量、变量、数据结构。

1.初始化:

从文件将输入符号串输入到字符缓冲区中。

2.利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。

3实验感受

需要利用程序设计语言的知识和大量编程技巧,递归下降分析法是一种较实用的分析法,通过这个练习可大大提高软件开发能力。

通过练习,掌握函数间相互调用的方法。

实验三预测分析法设计与实现

一、实验目的

加深对语法分析器工作过程的理解;加强对预测分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。

二、实验内容

在实验1的基础上,用预测分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。

三、实验要求:

1.对语法规则有明确的定义;

2.编写的分析程序能够对实验一的结果进行正确的语法分析;

3.对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;

4.实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过程,说明错误处理的实现。

四、实验步骤

1.定义目标语言的语法规则;

2.求解预测分析方法需要的符号集和分析表;

3.依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结束;

4.对遇到的语法错误做出错误处理。

五、实验结果

1.源代码

//byyl.cpp//程序的主函数

//Stack.cpp:

implementationoftheStackclass.

//

//////////////////////////////////////////////////////////////////////

//栈的类定义头文件

//Stack.h:

interfacefortheStackclass.

2.运行效果

分析成功的效果

分析失败的效果

五、实验分析以及感想

1.LL

(1)分析法的工作过程

开始往栈stack中放“#”,然后把文件开始符号压栈。

预测分析程序总是按stack栈顶符号X和当前输入符号a行事。

①若X=a=”#”,则分析成功,停止分析

②若X=a”#”,则把X从栈顶弹出,a指向下一个

输入符号

③若X∈Vn,则查分析表。

若M[X,a]为某候选式,则弹出X,把该候选式反序压栈;若M[X,a]=ε,则弹出X,什么也不压;若M[X,a]=error,则报错。

2.文法

S->aAcBe

A->bC

C->bC

C->ε

B->d

实验四算符优先分析法设计与实现

一、实验目的

加深对语法分析器工作过程的理解;加强对算符优先分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。

二、实验内容

在实验1的基础上,用算符优先分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。

三、实验要求:

1.对语法规则有明确的定义;

2.编写的分析程序能够对实验一的结果进行正确的语法分析;

3.对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;

四、实验步骤

1.定义目标语言的语法规则;

2.求解预测分析方法需要的符号集和分析表;

3.依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结束;

4.对遇到的语法错误做出错误处理。

五、实验内容

1.实验代码

//sfyxfx.cpp程序的主入口其中Stack在上一个程序中已经实现了

2.实验运行效果

六、实验分析以及感想

构造方法以及算法

直观算符优先分析法使用两个工作栈。

OPTR--寄存操作符及#,初值为#,(输入串末尾也加#)

OPND--寄存操作数及结果,初值为空,最后为运算结果。

设Q代表OPTR栈顶的当前符号,a代表新的输入符号,则直观算符优先算法为:

1.Readnextsymboltoa;

2.Ifa=ithenpushaintoOPND,GOTO1;

3.IfQ·>athenCallE

(1)QE

(2);GOTO3;

(注:

E

(1)QE

(2)指popE

(1);popE

(2);

t:

=E

(1),&,E

(2)进行Q运算;pusht;popQ);

4.IfQathen

IfQ=’(‘anda=‘)’thenpopQ;GOTO1;

IfQ=a=‘#’thensuccess;halt.

5.IfQ<·athenpushaintoOPTR;GOTO1;

6.If(Q,a)=Err.ThenCallERROR.

26

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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