编译原理实验指导书

合集下载

编译原理实验指导

编译原理实验指导

编译原理实验指导编译原理实验指导⽬录实验1:⽂法的读⼊和输出 (3)实验2:词法分析程序的设计 (5)实验3:LL(1)⽂法构造 (7)实验4:语法分析程序的设计(1) (9)实验5:语法分析程序的设计(2) (11)实验6:逆波兰式的翻译和计算 (15)实验7:语法制导的三地址代码⽣成 (17)实验1 ⽂法的读⼊和输出⼀、实验⽬的熟悉⽂法的结构,了解⽂法在计算机内的表⽰⽅法。

⼆、实验内容1、设计⼀个表⽰⽂法的数据结构;2、从⽂本⽂件中读⼊⽂法,利⽤定义的数据结构存放⽂法,并输出;3、本实验结果还将⽤于实验3。

三、实验要求1、了解⽂法定义的4个部分:G(Vn, Vt, S, P)Vn ⽂法的⾮终结符号集合,在实验中⽤⼤写的英⽂字母表⽰;Vt ⽂法的终结符号集合,在实验中⽤⼩写的英⽂字母表⽰;S 开始符号,在实验中是Vn集合中的⼀个元素;P 产⽣式,分左部和右部,左部为⾮终结符号中的⼀个,右部为终结符号或⾮终结符号组成的字符串,如S->ab|c2、根据⽂法各个部分的性质,设计⼀个合理的数据结构⽤来表⽰⽂法,1)若使⽤C语⾔编写,则⽂法可以设计成结构体形式,结构体中应包含上述的4部分,2)若使⽤C++语⾔编写,则⽂法可以设计成⽂法类形式,类中⾄少含有4个数据成员,分别表⽰上述4个部分⽂法数据结构的具体设计由学⽣根据⾃⼰想法完成,并使⽤C或C++语⾔实现设计的数据结构。

3、利⽤完成的数据结构完成以下功能:1)从⽂本⽂件中读⼊⽂法(⽂法事先应写⼊⽂本⽂件);2)根据⽂法产⽣式的结构,分析出⽂法的4个部分,分别写⼊定义好的⽂法数据结构的相应部分;3)整理⽂法的结构;4)在计算机屏幕或者⽂本框中输出⽂法,⽂法输出按照⼀个⾮终结符号⼀⾏,开始符号引出的产⽣式写在第⼀⾏,同⼀个⾮终结符号的候选式⽤“|”分隔的⽅式输出。

四、实验环境PC微机DOS操作系统或Windows 操作系统Turbo C 程序集成环境或Visual C++ 程序集成环境五、实验步骤1、根据⽂法定义,设计出⽂法数据结构2、⽤学⽣选择的语⾔,实现⽂法的数据结构3、编写调试⽂法读⼊和输出程序,4、测试程序运⾏效果:从⽂本⽂件中读⼊⼀个⽂法,在屏幕上输出,检查输出结果。

《编译原理》实验指导及报告书(新)课件

《编译原理》实验指导及报告书(新)课件

《编译原理》实验指导及报告书 / 学年第学期姓名:______________学号:______________班级:______________指导教师:______________计算机科学与工程学院2016编译原理实验初步一、实验目的1、熟练掌握使用CODEBLOCK进行C程序编程,提高阅读程序与调试程序的能力。

2、掌握堆栈与队列的应用。

3、掌握C语言中对字符串处理的常见函数与方法。

4、熟悉编程规范,养成对重要的程序段进行必要的注释说明。

二、实验内容与步骤1、下面的程序是对一个简单的算术表达式进行计算求值,并输出表达式的值与该表达式的后缀形式。

该程序在求值与转换后缀形式时使用了2个堆栈和1个队列。

请认真阅读程序和调试,并将程序补充完整。

#include<stdio.h>#include<malloc.h>#include<string.h>#define ERROR 0#define OK 1#define STACK_INT_SIZE 10 /*存储空间初始分配量*/#define Queue_Size 20typedef int ElemType; /*定义元素的类型*/typedef struct{char Qdata[Queue_Size];int front,rear;}SeqQueue;typedef struct{ElemType *base;ElemType *top;int stacksize; /*当前已分配的存储空间*/}SqStack;SqStack OPTR, OPND;SeqQueue SeQ;char PreTab[7][7]={{'>','>','<','<','<','>','>'},{'>','>','<','<','<','>','>'},{'>','>','>','>','<','>','>'},{'>','>','>','>','<','>','>'},{'<','<','<','<','<','=','x'},{'>','>','>','>','x','>','>'},{'<','<','<','<','<','x','='}}; // 该矩阵中,X字符表示不存在优先关系,在分析过程查找到这个值,表示表达式有错。

《编译原理》实验指导书

《编译原理》实验指导书

《编译原理》实验指导书编译⽅法实验指导书柴本成赵晨编写浙江万⾥学院2010.01⽬录实验⼀有限⾃动机的构造与实现 (1)实验⼆词法分析器的设计 (3)实验三语法分析-递归下降分析器 (5)实验四LL(1)⽂法预测分析表的实现 (6)附录 (9)附录⼀实验结果的提交与检查 (9)附录⼆实验报告参考格式 (9)附录三Visual C++上机环境简介 (10)附录四参考程序 (13)实验⼀有限⾃动机的构造与实现⼀、实验⽬的1、正确理解正规式和正规集以及有限⾃动机的定义;2、熟练掌握⽤状态转换图表⽰有限⾃动机的⽅法。

⼆、实验预习提⽰1、正规表达式就是⼀种形式化的表⽰法,它可以表⽰单词符号的结构,从⽽精确地定义单词符号集。

正规表达式简称为正规式,它表⽰的集合即为正规集。

2、状态转换图是⼀张当输⼊不同内容时选择不同分析路径的有向图。

⼀个状态转换图可⽤于识别⼀定的字符串。

3、有限⾃动机(FA)是更⼀般化的状态转换图,可⽤来识别正规集;分为DFA和NFA 两种。

三、实验内容构造识别如下字符串的状态转换图,并将其编程实现。

1、识别标识符(以字母开始由字母和数字构成的字符串,要求长度不超过10);参考程序:#include#include //字符串处理的头⽂件//判断⼀个字符是不是字母bool Isletter(char ch){if(ch>='a' && ch<='z' || ch>='A' && ch<='Z') return true;return false;}//判断⼀个字符是不是数字bool IsDigit(char ch){if(ch>='0' && ch<='9') return true;return false;}//判断⼀个字符串是不是标识符bool IsId(char *str){if(!Isletter(str[0]) ) return false;int l=strlen(str); //计算字符串的长度for(int i=1;iif(Isletter(str[i]) || IsDigit(str[i])) continue; //如果是字母或数字就继续循环else return false; //否则,返回不是字符串return true;}void main(){char *str="1abc"; //初始化字符串,也可键盘输⼊if(IsId(str)) cout<<"accept!"<else cout<<" not accept!"<}2、识别实数(要求正负号可有可⽆,长度不超过20,不要求识别⽤科学记数法表⽰的实数)。

编译原理实验指导书

编译原理实验指导书

编译原理实验指导书计算机学院实验1 词法分析程序一、实验目的构造simple语言的词法分析程序,程序要求能对输入的字符串流进行词法分析。

在实验的过程中,学会应用单词分析的方法——NFA(非确定有穷自动机)和DFA(确定有穷自动机),加深对词法分析原理的理解。

二、实验内容编写为任一正则文法(见实验参考(一)simple惯用的词法)构造非确定有穷自动机NFA并转换成确定有穷自动机DFA,并对任给的一个输入串(见实验参考(二)测试用输入串)进行词法分析的程序,程序的输出为单词的序列(见实验参考(三)程序输出形式)。

三、实验参考(一)simple 惯用的词法1. 下面是语言的关键字:Begin if then while do end所有的关键字都是保留字,并且必须是小写。

2. 下面是专用符号::= + * / < <= <> > >= = ; ( ) #3. 其他单词是标识符(ID)和整型常数(NUM),通过下列正规式定义:ID = letter(letter| digit)*NUM = digit digit*letter = a |…| z | A |…| Zdigit = 0 |…| 9小写和大写字母是有区别的。

思考:构造实数的正规表达式,力争实现对实数的识别及表示。

4. 空格由空白、换行符和制表符组成。

空格一般用来分隔ID、NUM、运算符和关键字,词法分析阶段通常被忽略。

5. 各种单词符号对应的种别码如下表所示:(二)词法分析程序的功能1. 输入为所给文法的源程序字符串。

2. 程序的输出形式为单词串的输出形式。

所输出的每一单词,均按形如(syn,token和sum)的二元式编码。

其中,syn 为单词种别码;token为存放的单词自身字符串;sum为整型常数。

3.测试源程序片断:begin x:=9; if x>0 then x:=2*x+1/3;end #。

编译原理实验指导书

编译原理实验指导书

陕西理工学院数学与计算机科学学院《编译原理》实验指导班级网络10级指导教师曹阳计算机工程教研室2012年8月25日编译原理实验指导书一、实验的目的《编译原理》是针对计算机专业的学生开设的一门专业基础课程,对引导学生进行科学思维和提高学生解决实际问题的能力有重要的作用。

开设“编译原理实验”的主要目的是让学生加深理解编译原理的基本理论、方法、词法分析、语法分析、中间代码的生成直到最后的代码生成,了解编译器原理,从而提高学生分析问、题解决问题的能力。

通过实验实现以下基本目标:1.深化已学的知识,完成从理论到实践的转化通过实验,进一步加深对编译原理基本思想、原理的了解。

2. 提高分析和解决实际问题的能力实验不仅是编译原理的一次模拟训练,同时通过实验,积累经验,提高分析和解决问题的能力。

3.培养“开拓创新”能力大力提倡和鼓励在程序中使用新方法,新技术。

激发学生实践的积极性与创造性,开拓思路,设计新算法,进行新创意,培养创造性能力。

二、参加实验的学生应具备的条件参加实验的学生应当具备计算机程序设计的一些基础的知识。

即学生应当熟练掌握和使用一种计算机操作系统(windows操作系统等)、一种程序设计语言(vb、vc、c、delphi等)。

三、实验要求实验的要求体现于整个工作的各个阶段中,可根据所选课题的特点而有所侧重,但应达到如下的基本要求:(1) 根据课题任务制定合理、可行的工作计划任务;(2) 制定适当的技术方案;(3) 学生在老师的指导下独立完成设计过程;(4) 撰写实验报告(包括实验内容中各个阶段所要求的文字材料);(5) 通过实验检查评定;四、实验项目与内容提要五、实验课程考核办法1、该实验课程考核成绩按百分制计算,满分为100分,60分为及格,60分以上者可获取该学分。

2、该实验课考核由三部分组成:实验课前预习(20%),实验操作(60%),实验报告(20%)。

3、各部分成绩由实验指导教师在每个实验项目完成后分别给出,在学期结束后或完成全部实验项目后综合给出该门实验课的成绩。

学生用-编译原理实验指导书

学生用-编译原理实验指导书

实验一无符号数的有穷自动机的实现(一)实验目的无符号数的有穷自动机的实现目的是使学生掌握文法的形式描述,穷自动机的概念。

将文法转换成有穷自动机的方法,理解出错处理程序思想,如何用状态矩阵实现一个穷自动机的机内表示。

(二)实验内容1.无符号数的BNF描述(0)<无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分>(1)<余留无符号数>→d <余留无符号数> | . <十进制数> | e <指数部分>|ε(2)<十进制小数> → d <余留十进制小数>(3)<余留十进制小数> e <指数部分> | d <余留十进制小数> | ε(4)<指数部分> → d <余留整指数> | + <整指数> | - <整指数>(5)<整指数> → d <余留整指数>(6)<余留整指数> → d <余留整指数> | ε2.将G[<无符号数>]文法转换成有穷自动机。

3.构造状态矩阵;将有穷自动机的状S1 S2 ……Sn及输入的字a1 a2 ……am 构成一个n*m的矩阵。

4.用状态矩阵设计出一个词法分析程序。

5.扫描无符号数,根据文法给出无符号数出错的位置。

(三)实验要求1.学生课前要认真阅读实验指导,理解实验内容与相关理论知识的关系,并完成预习报告2.用C语言或其它高级语言编写程序3.写出实验报告实验二语法制导把表达式翻译成逆波兰式(一)实验目的进一步掌握语法制导翻译的概念,理解中间语言,设计出错处理程序方法,掌握把表达式翻译成中间语言的算法。

(二)实验内容1.从左到右扫描中缀表达式,经语法分析找出中缀表达式出现的错误并给出错误的具体位置和类型。

编译原理—实验指导书-1

编译原理—实验指导书-1
(13)end.#
4.词法分析器的功能和输出格式
词法分析器的功能是输入以字符串表示的源程序,从左向右扫描每行源程序的符号,拼成单词,换成统一的二元式(单词种别码,单词符号的属性值)表示。对给定的程序通过词法分析器识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示,本程序是通过对给定路径的文件的分析后以单词符号和文字提示显示),本实验中,采用单词种别码是一符一种种别码的方式。
(4)var
(5)a,b,c:integer;
(6)x:char;
(7)begin
(8)if(a+c*3>b)and(b>3)thenc:=3;
(9)x:=2+(3*a)-b*c*8;
(10)forx:=1+2to3dob:=100;
(11)whilea>bdoc:=5;
(12)repeata:=10;untila>b;
(124){
(125)printf("%s\t$运算符\n\n",Word);
(126)}
(127)else if(ch=='-')
(128){
(129)printf("%s\t$运算符\n\n",Word); //判断结果为“--”
(2)设计描述Sample语言各类单词结构的状态转换图(即有限自动机FA);
如标识符的状态转换图可以用下图表示
其相应代码科为
(1)recog_id(char ch)
(2){
(3)char state='0';
(4)while(state!='2')
(5){
(6)switch(state)

编译原理实验指导书

编译原理实验指导书

编译原理实验指导书计算机科学与技术系2007年6月目录实验目的和任务 (1)实验一:词法分析器 (1)实验二:语法分析器1 (5)实验三:语法分析器2 (9)实验四:语义分析和中间代码生成器 (11)实验目的和任务编译原理是一门实践性很强的课程,只有通过实践,才能真正理解其理论的深层内涵,切实掌握编译器的生成技术。

实际的编译程序是十分复杂的,有时多达十几万条指令组成,实现起来难度很大。

在编译原理的实验中,简化了真实程序设计语言要面临的许多问题,选用了具有一定表现能力的实用语言的子集。

实验主要涉及最关键的3个环节──词法分析、语法分析和中间代码生成,每个环节既独立又相互关联,前后衔接,可合为一体,能较清楚地展现编译器前端的工作状况。

编程语言要求:C、C++或JAVA。

实验一:词法分析器一、实验目的通过编写词法分析程序,了解词法分析的过程。

二、实验内容编写能识别给定的程序设计语言的词法规则,输出单词流的识别程序。

三、实验设备及工具1.硬件:PC机Pentium100以上。

2.软件:Win2000或WinXP、BC++、VC++或JA V A开发环境。

四、实验说明以下所给文法是进行词法分析和语法分析的依据,并将该文法中涉及到的单词信息提取到了单词符号与种别对照表中。

本次实验要求编写符合该文法构词规则的词法分析器。

1. 文法G(<程序>)<程序>→BEGIN <语句表> END.<语句表>→<语句>|<语句>;<语句表><语句>→<赋值语句>︱<条件语句>︱<WHILE语句>︱<复合语句><赋值语句>→<变量>=<算术表达式><条件语句>→IF <关系表达式> THEN <语句> ELSE <语句><WHILE语句>→WHILE <关系表达式> DO <语句><复合语句>→BEGIN <语句表> END<算术表达式>→<项>|<算术表达式>+<项>|<算术表达式>-<项><项>→<变量>|<整数><关系表达式>→<算术表达式><关系运算符><算术表达式><关系运算符>→<︱= =︱><变量>→<标识符><标识符>→<标识符><字母>|<标识符><数字>|<字母><整数>→<数字>|<数字><整数><字母>→A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z<数字>→0|1|2|3|4|5|6|7|8|9注意阴影部分,其中<整数>和<标识符>被看作最小词法单位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译原理实验指导

《编译原理》实验指导书
太原科技大学计算机学院 -3-1

《编译原理》是国内外各高等院校计算机科学技术类专业,特别是计算机软件专业的一门重要专业课程。

该课程系统地向学生介绍编译程序的结构、工作流程及编译程序各组成部分的设计原理和实现技术。

由于该课程理论性和实践性都比较强,内容较为抽象复杂,涉及到大量的软件设计和算法,因此,一直是一门比较难学的课程。

为了使学生更好地理解和掌握编译原理和技术的基本概念、基本原理和实现方法,实践环节非常重要,只有经过上机进行程序设计,才能使学生对比较抽象的教学内容产生具体的感性认识,增强学生综合分析问题、解决问题的能力,并对提高学生软件设计水平大有益处。

为了配合《编译原理》课程的教学,考虑到本课程的内容和特点,本指导书设置了七个综合性实验,分别侧重于词法分析、NFA的确定化、非递归预测分析、算符优先分析器的构造、LR分析、语义分析和中间代码的生成、基于DAG的基本块优化,以支持编译程序的各个阶段,基本涵盖了《编译原理》课程的主要内容。

本指导书可作为《编译原理》课程的实验或课程设计内容,在课程教学的同时,安排学生进行相关的实验。

实验平台可选择在MS-DOS或Windows操作系统环境,使用C/C++的任何版本作为开发工具。

学生在做完试验后,应认真撰写实验报告,内容应
包括实验名称、实验目的、实验要求、实验内容、测试或运行结果等。

目录
实验一词法分析 ........................................................... 错误!未定义书签。

实验二 NFA的确定化.................................................... 错误!未定义书签。

实验三非递归预测分析 ............................................... 错误!未定义书签。

实验四算符优先分析器的构造................................... 错误!未定义书签。

实验五 LR分析 .............................................................. 错误!未定义书签。

实验六语义分析和中间代码生成................................ 错误!未定义书签。

实验七基于DAG的基本块优化................................... 错误!未定义书签。

相关文档
最新文档