编译原理实验报告
实验名称: 编写语法分析程序
实验类型: 上机实验
指导教师: 蒋勇
专业班级: 软件1002班
姓 名:
学 号: 20101
实验地点: 东6A319
实验成绩:______________________
日期: 20##年 05 月 20日
一、实验目的
…… …… 余下全文
编译原理实验报告
实验名称: 编写语法分析程序
实验类型: 上机实验
指导教师: 蒋勇
专业班级: 软件1002班
姓 名:
学 号: 20101
实验地点: 东6A319
实验成绩:______________________
日期: 20##年 05 月 20日
一、实验目的
…… …… 余下全文
实验三 语法分析器
一、实验目的:
理解和掌握LL(1)语法分析方法的基本原理;根据给出的LL(1)文法,掌握LL(1)分析表的构造及分析过程的实现,掌握语法分析方法和程序设计方法。
二、实验要求:
对每个非终极符按其产生式结构构造相应语法分析子程序,其中终极符产生匹配命令,而非终极符则产生过程调用命令。因为文法递归相应子程序也递归,所以称这种方法为递归子程序下降法或递归下降法。其中子程序的结构与。产生式结构几乎是一致的,通过设计、编程、调试出一个具体语法分析程序。
三、实验原理:
语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。语法分析器的工作本质上是按文法的产生式,识别输入串是否是一个句子。自上而下分析法的主旨是,对任何输入串,试图用一切可能的方法,从文法开始符号出发,自上而下地为输入串建立一棵语法树。这种方法本质上是一种试探过程,是反复使用不同产生式谋求匹配输入串的过程。
对于一个文法满足以下三个条件,则称该文法为LL(1)文法。
文法不含有左递归。
对于文法中的每一个非终结符A的各个产生式的侯选首符集两两不相交。即,若 A->Q1|Q2|…|Qn
则 FIRST(Qi) ^FIRST(Qj)=null (i!=j)
对文法中的每个非终结符号A,若他存在某个侯选首符集包含空串,则
FIRST(A)^FOLLOW(A)=null
对于一个文法满足LL(1)条件时,我们就可以对其输入串进行有效的无回溯的自上而下分析程序,这个分析程序是由一组递归过程组成的,每个过程对应文法的一个非终结符号。
四、实验步骤:
1、功能描述:
根据给定的文法,由程序生成项集族和语法分析表,对输入的源程序进行词法分析,得到语法分析的输入串,经过语法分析后得到三个栈,它们分别是状态栈,字符栈,输入栈,从而分析出输入的源程序是否有语法错误。
…… …… 余下全文
语法分析器的设计实验报告
一、实验内容
语法分析程序用LL(1)语法分析方法。首先输入定义好的文法书写文件(所用的文法可以用LL(1)分析),先求出所输入的文法的每个非终结符是否能推出空,再分别计算非终结符号的FIRST集合,每个非终结符号的FOLLOW集合,以及每个规则的SELECT集合,并判断任意一个非终结符号的任意两个规则的SELECT集的交集是不是都为空,如果是,则输入文法符合LL(1)文法,可以进行分析。
对于文法:
G[E]:
E->E+T|T
T->T*F|F
F->i|(E)
分析句子i+i*i是否符合文法。
二、基本思想
1、语法分析器实现
语法分析是编译过程的核心部分,它的主要任务是按照程序的语法规则,从由词法分析输出的源程序符号串中识别出各类语法成分,同时进行词法检查,为语义分析和代码生成作准备。这里采用自顶向下的LL(1)分析方法。
语法分析程序的流程图如图5-4所示。
该程序可分为如下几步:
(1)读入文法
(2)判断正误
(3)若无误,判断是否为LL(1)文法
(4)若是,构造分析表;
(5)由句型判别算法判断输入符号串是为该文法的句型。
三、核心思想
该分析程序有15部分组成:
(1)首先定义各种需要用到的常量和变量;
(2)判断一个字符是否在指定字符串中;
(3)读入一个文法;
(4)将单个符号或符号串并入另一符号串;
(5)求所有能直接推出&的符号;
(6)求某一符号能否推出‘ & ’;
(7)判断读入的文法是否正确;
(8)求单个符号的FIRST;
(9)求各产生式右部的FIRST;
(10)求各产生式左部的FOLLOW;
(11)判断读入文法是否为一个LL(1)文法;
(12)构造分析表M;
(13)句型判别算法;
(14)一个用户调用函数;
…… …… 余下全文
词法分析器实验报告
实验目的:
设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。
实验要求:
该程序要实现的是一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分界符五大类。并依次输出各个单词的内部编码及单词符号自身值。
(一)实验内容
(1)功能描述:对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。
(2)程序结构描述:
函数调用格式:
参数含义:
String string;存放读入的字符串 String str; 存放暂时读入的字符串
char ch; 存放读入的字符 int rs 判断读入的文件是否为空
char []data 存放文件中的数据 int m;通过switch用来判断字符类型,
函数之间的调用关系图:
函数功能:
Judgement()判断输入的字符并输出单词符号,返回值为空;
getChar() 读取文件的,返回值为空;
isLetter(char c) 判断读入的字符是否为字母的,返回值为Boolean类型;
switch (m) 判断跳转输出返回值为空;
isOperator(char c)判断是否为运算符的,返回值为Boolean类型;
isKey(String string)判断是否为关键字的,返回值为Boolean类型;
isDigit(char c) 判断读入的字符是否为数字的,返回值为Boolean类型。
测试结果:
(3)程序总体执行流程图
…… …… 余下全文
山东大学
编译技术课程设计
班 级 软件一班
学 号 2008008000XX
姓 名 软件一班万岁
指导老师 贺老师
二零一一年 三 月
<<编译技术>>是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。
基本要求:
1.词法分析器 产生下述小语言的单词序列
这个小语言的所有的单词符号,以及它们的种别编码和内部值如下表:
对于这个小语言,有几点重要的限制:
首先,所有的关键字(如IF﹑WHILE等)都是“保留字”。所谓的保留字的意思是,用户不得使用它们作为自己定义的标示符。例如,下面的写法是绝对禁止的:
IF(5)=x
…… …… 余下全文
编译原理语法分析实验报告
软工082班
兰洁
200831104044
一、 实验内容
二、 实验目的
三、 实验要求
四、 程序流程图
l 主函数;
l scanner();
l irparser()函数
l yucu() /*语句串分析*/
l statement()/*语句分析函数*/
l expression()/*表达式分析函数*/
l term()/*项分析函数*/
l factor()/*因子分析函数*/
五、 程序代码
六、 测试用例
七、 输出结果
八、 实验心得
一、实验内容:
编写为一上下文无关文法构造其递归下降语法分析程序,并对任给的一个输入串进行语法分析检查。程序要求能对输入串进行递归下降语法分析,能判别程序是否符合已知的语法规则,如果不符合(编译出错),则输出错误信息。
二、实验目的:
构造文法的语法分析程序,要求采用递归下降语法分析方法对输入的字符串进行语法分析,实现对词法分析程序所提供的单词序列的语法检查和结构分析,进一步掌握递归下降的语法分析方法。
三、实验要求:
利用C语言编制递归下降分析程序,并对Training语言进行语法分析。
1. 待分析的Training语言语法。
用扩充的表示如下:
<程序>-->function<语句串>endfunc
…… …… 余下全文