| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

编译原理实验报告LL(1)分析法

文***享

贡献于2022-12-13

字数:6380

课 程 编译原理 实验名称 实验二 LL(1)分析法
实验目
1.掌握LL(1)分析法基原理
2.掌握LL(1)分析表构造方法
3.掌握LL(1)驱动程序构造方法

实验容求
根某文法编制调试LL(1)分析程序便意输入符号串进行分析次实验目加深预测分析LL(1)分析法理解
列文法LL(1)分析法意输入符号串进行分析:
(1)E>TG
(2)G>+TG
(3)G>ε
(4)T>FS
(5)S>*FS
(6)S>ε
(7)F>(E)
(8)F>i
程序输入#结束符号串(包括+*()i#):i+i*i#输出程:
步骤
分析栈
剩余输入串
产生式
1
E
i+i*i#
E>TG






二 实验程结果
代码:
#include
#include edgeh
using namespace std

edgeedge()
{
cin>>left>>right
rlenrightlength()
if(NODEfind(left)>NODElength())
NODE+left
}

string edgegetlf()
{
return left
}

string edgegetrg()
{
return right
}

string edgegetfirst()
{
return first
}

string edgegetfollow()
{
return follow
}

string edgegetselect()
{
return select
}

string edgegetro()
{
string str
str+right[0]
return str
}

int edgegetrlen()
{
return rightlength()
}

void edgenewfirst(string w)
{
int i
for(i0i if(firstfind(w[i])>firstlength())
first+w[i]
}

void edgenewfollow(string w)
{
int i
for(i0i if(followfind(w[i])>followlength()&&w[i]'@')
follow+w[i]
}

void edgenewselect(string w)
{
int i
for(i0i if(selectfind(w[i])>selectlength()&&w[i]'@')
select+w[i]
}

void edgedelfirst()
{
int ifirstfind('@')
firsterase(i1)
}
int SUM
string NODEENODE

计算first
void first(edge niedge *nint x)
{
int ij
for(j0j {
if(nigetlf()n[j]getlf())
{
if(NODEfind(n[j]getro()) {
for(i0i if(n[i]getlf()n[j]getro())
first(n[i]nx)
}
else
n[x]newfirst(n[j]getro())
}
}
}

计算follow
void follow(edge niedge *nint x)
{
int ijks
string str
for(i0i {
sNODEfind(nigetrg()[i])
if(s1) 非终结符
if(i for(j0j if(n[j]getlf()find(nigetrg()[i])0)
{
if(NODEfind(nigetrg()[i+1]) {
for(k0k if(n[k]getlf()find(nigetrg()[i+1])0)
{
n[j]newfollow(n[k]getfirst())
if(n[k]getfirst()find(@) n[j]newfollow(nigetfollow())
}
}
else
{
strerase()
str+nigetrg()[i+1]
n[j]newfollow(str)
}
}
}
}

计算select
void select(edge &niedge *n)
{
int ij
if(ENODEfind(nigetro()) {
ninewselect(nigetro())
if(nigetro()@)
ninewselect(nigetfollow())
}
else
for(i0i {
for(j0j if(nigetrg()[i]n[j]getlf()[0])
{
ninewselect(n[j]getfirst())
if(n[j]getfirst()find('@')>n[j]getfirst()length())
return
}
}
}

输出集合
void out(string p)
{
int i
if(plength()0)
return
cout<<{
for(i0i {
cout< }
cout<}

连续输出符号
void outfu(int astring c)
{
int i
for(i0i cout<}


输出预测分析表
void outgraph(edge *nstring (*yc)[50])
{
int ijk
bool flag
for(i0i {
if(ENODE[i]'@')
{
outfu(10 )
cout< }
}
outfu(10 )
cout<<#< int x
for(i0i {
outfu(4 )
cout< outfu(5 )
for(k0k {
flag1
for(j0j {
if(NODE[i]n[j]getlf()[0])
{
xn[j]getselect()find(ENODE[k])
if(x1)
{
cout<<>< yc[i][k]n[j]getrg()
outfu(9n[j]getrlen() )
flag0
}
xn[j]getselect()find('#')
if(kENODElength()1&&x1)
{
cout<<>< yc[i][j]n[j]getrg()
}
}
}
if(flag&&ENODE[k]'@')
outfu(11 )
}
cout< }
}

分析符号串
int pipei(string &chuanstring &fenxistring (*yc)[50]int &b)
{
char cha
int xijk
b++
cout< if(b>9)
outfu(8 )
else
outfu(9 )
cout< outfu(26chuanlength()fenxilength() )
cout< outfu(10 )
achuan[0]
chfenxi[fenxilength()1]
xENODEfind(ch)
if(x1)
{
if(cha)
{
fenxierase(fenxilength()11)
chuanerase(01)
cout<<'< if(pipei(chuanfenxiycb))
return 1
else
return 0
}
else
return 0
}
else
{
if(ch'#')
{
if(cha)
{
cout<<分析成功< return 1
}
else
return 0
}
else
if(ch'@')
{
fenxierase(fenxilength()11)
if(pipei(chuanfenxiycb))
return 1
else
return 0
}
else
{
iNODEfind(ch)
if(a'#')
{
xENODEfind('@')
if(x1)
jENODElength()1
else
jENODElength()
}
else
jENODEfind(a)
if(yc[i][j]length())
{
cout<< fenxierase(fenxilength()11)
for(kyc[i][j]length()1k>1k)
if(yc[i][j][k]'@')
fenxi+yc[i][j][k]
if(pipei(chuanfenxiycb))
return 1
else
return 0
}
else
return 0
}
}
}


void main()
{
edge *n
string str(*yc)[50]
int ijk
bool flag0
cout<<请输入文关文法总规数:< cin>>SUM
cout<<请输入具体规(格式:左部 右部@空):< nnew edge[SUM]
for(i0i for(j0j {
strn[i]getrg()
if(NODEfind(str[j])>NODElength()&&ENODEfind(str[j])>ENODElength())
ENODE+str[j]
}
计算first集合
for(i0i {
first(n[i]ni)
}
outfu(10~*~)cout< for(i0i if(n[i]getfirst()find(@) {
if(NODEfind(n[i]getro()) {
for(k1k {
if(NODEfind(n[i]getrg()[k]) {
for(j0j {
if(n[i]getrg()[k]n[j]getlf()[0])
{
n[i]newfirst(n[j]getfirst())
break
}
}
if(n[j]getfirst()find(@)>n[j]getfirst()length())
{
n[i]delfirst()
break
}
}
}
}
}
计算follow集合
for(k0k {
for(i0i {
if(n[i]getlf()n[0]getlf())
n[i]newfollow(#)
follow(n[i]ni)
}
for(i0i {
for(j0j if(n[j]getrg()find(n[i]getlf())n[j]getrlen()1)
n[i]newfollow(n[j]getfollow())
}
}
计算select集合
for(i0i {
select(n[i]n)
}
for(i0i {
strerase()
for(j0j if(n[j]getlf()[0]NODE[i])
{
if(strlength())
strn[j]getselect()
else
{
for(k0k if(strfind(n[j]getselect()[k]) {
flag1
break
}
}
}
}
输出
cout< outfu(SUM )
cout< outfu(SUM )
cout< outfu(5+SUM*)
cout< for(i0i {
for(j0j if(NODE[i]n[j]getlf()[0])
{
outfu(3 )
cout< outfu(SUM+4 )
out(n[j]getfirst())
outfu(SUM+42*n[j]getfirst()length() )
out(n[j]getfollow())
cout< break
}
}
outfu(5+SUM*)
cout< if(flag)
{
cout<<该文法LL(1)文法< return
}
else
{
cout<<该文法LL(1)文法<
}
输出预测分析表
cout< ycnew string[NODElength()][50]
outgraph(nyc)
string chuanfenxifchuan
cout< cin>>chuan
fchuanchuan
fenxi#
fenxi+NODE[0]
i0
cout< cout<<步骤
outfu(7 )
cout<<分析栈
outfu(10 )
cout<<剩余输入串
outfu(8 )
cout<<推导产生式匹配
if(pipei(chuanfenxiyci))
cout< else
cout<}

截屏:

三 实验中问题心
次实验更加熟悉LL(1)工作流程LL(1)分析表构造方法前课堂搞懂算法流程通实验进步解

文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 香币 [ 分享文档获得香币 ]

该文档为用户出售和定价!

购买文档

相关文档

编译原理实验报告3-LL(1)文法构造

实验3 LL(1)文法构造一、实验目的熟悉LL(1)文法的分析条件,了解LL(1)文法的构造方法。 二、实验内容1、编制一个能够将一个非LL(1)文法转换为LL(1)文法;2、消除左递归;3、消除回溯。 三、实验要求1、 将一个可转换非LL(1)文法转换为LL(1)文法,要经过两个阶段,1)消除文法左递归,2)提取左因子,消除回溯。2、 提取文法左因子算法:1)对文法G的所

文***享 2年前 上传306   0

编译原理实验报告LR(1)分析法

河南工业大学实验报告课 程 编译原理 实验名称 实验四 LR(1)分析法 一. 实验目的 1.掌握LR(1)分析法的基本原理; 2.掌握LR(1)分析表的构造方法; 3.掌握LR(1)驱动程序的构造方法。二. 实验内容及要求根据某一文法编制调试LR(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对LR(1)分析法的理解。

文***品 2年前 上传1059   0

《编译原理》课程实验报告

《编译原理》课程实验报告题 目: 词法分析器实验 专 业: 计算机科学与技术 班 级: 1班 学 号: * * * ***** 姓 名: * * * 一、实验目的通过本实验的编程实践,使

文***享 3年前 上传630   0

编译原理-实验报告2-递归下降分析法

计算机硬件实验室实验报告姓名学号班 级成 绩 设备名称及软件环境递归下降分析一、实验目的: 根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。二、实验要求:对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E->TG(2)G->+TG|—TG(3)G->ε(4)T

文***品 3年前 上传602   0

编译原理语法分析实验报告

编译原理语法分析实验报告软工班一、 实验内容二、 实验目的三、 实验要求四、 程序流程图l 主函数;l scanner();l irparser()函数l yucu() /*语句串分析*/l statement()/*语句分析函数*/l expression()/*表达式分析函数*/l term()/*项分析函数*/ l factor()/*因子分析函数*/五、 程

文***享 2年前 上传951   0

实验2.正规式的定义与应用 编译原理实验报告

实验2. 正规式的定义与应用一、 实验目的1. 熟悉正规式的构造方法;2. 熟悉从字符串中识别特定字符串的方法;3. 复习对文件的操作。二、 实验内容和要求已知一段C语言程序:#include “stdio.h“int gcd(int k){ int m; m=k+2; return m;}main(){ /*main function*/ int i, main

文***品 1年前 上传414   0

编译原理实验报告(一)词法分析程序

 编译原理实验报告(一) ----词法分析程序【目的要求】 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 【题目分析】本实验以用户指定的想编译的以C语言编写的文件作为词法分析程序的输入数据。在进行词法分析中,先

文***品 3年前 上传782   0

编译原理实验指导书

目 录相关问题说明 1实验题 2实验1 词法分析(2课时) 3实验2 语法分析(2课时) 5实验3 语义分析(2课时) 7实验4 代码生成(2课时) 9参考书目 11相关问题说明本课程共有4个实验, 本课程中所实现的程序为普通C或C++程序,在Windows环境下,属于控制台应用程序。提交实验成果:1. 实验成果包括:n 源程序。用学号加姓名方式命名项目或源程序所在

文***品 3年前 上传588   0

编译原理课后习题答案

编译原理课后习题答案Chapter 11.解答:程序设计语言:程序设计语言是遵守一定规范的、描述“计算”(Computing)过程的形式语言。一般可以划分为低级语言和高级语言两大类。低级语言是面向机器的语言,它是为特定的计算机系统设计的语言,机器指令、汇编语言是低级语言。高级语言是与具体计算机无关的“通用”语言,它更接近于人类的自然语言和数学表示,例如FORTRAN、Pascal、C等等我

z***u 2年前 上传604   0

《编译原理》期末试题(五)

1.语言是A.句子的集合 B.产生式的集合 C.符号串的集合 D.句型的集合2.编译程序前三个阶段完成的工作是A.词法分析、语法分析和代码优化 B.代码生成、代码优化和词法分析

x***2 2年前 上传733   0

计算机组成原理实验报告 (1)

郑州航空工业管理学院计算机科学与应用系实验报告课 程 名: 计算机组成原理 学 号: 姓 名: 指导教师: 成 绩; 计算

文***品 1年前 上传404   0

编译原理课程设计报告 简单编译器的设计与实现

 编译原理课程设计 ——简单编译器的设计与实现 班 级: 组长: 组员: 指导教师: 设计时间: 姓名 分工 组长: 语法分析部分,语义分析和中间代码生成部分,符号表的管理,目标代码的生成,数据结构的设计和总体框架的设计。 组员: 中间代码优化部分,负责从DAG图中获得优化后的四元式代码,以及

文***享 5年前 上传1905   0

编译原理期末试题附答案

《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。(×)3.一个算符优先文法可能不存在算符优先函数与之对应。 (√ )4.语法分析时必须先消除文法中的左递归 。 (×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点

z***u 1年前 上传428   0

编译原理实验3-4预测分析表方法

实验3-4 预测分析表方法班级:_ _ 学号:_ _ 姓名:_ _ 得分:_ _一、实验目的理解预测分析表方法的实现原理。二、实验内容: 编写一通用的预测法分析程序,要求有一定的错误处理能力,出错后能够使程序继续运行下去,直到分析过程结束。可通过不同的文法(通过数据表现)进行测试。 二、实验内容提示1.算法数据构造:

z***u 1年前 上传328   0

编译原理课程设计心得体会

编译原理课程设计心得体会  经过一个星期的编译原理课程设计,本人在刘贞老师的指导下,顺利完成该课程设计。通过该课程设计,收获颇多。  一、对实验原理有更深的理解  通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,课本上的知识师机械的,表面的。通过把

a***k 11年前 上传636   0

编译原理课后习题第三版答案

第二章P36-6(1)是0~9组成的数字串(2)最左推导:最右推导:P36-7G(S)P36-8文法:最左推导:最右推导:语法树:/*************************************************/P36-9句子iiiei有两个语法树:P36-10/****************************

z***u 2年前 上传509   0

广东海洋大学编译原理期末复习资料

广东海洋大学《编译原理》期末试题(一) 一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分) 1.编译程序是对高级语言程序的解释执行。(× ) 2.一个有限状态自动机中,有且仅有一个唯一的终态。(×)(终态一个或多个) 3.一个算符优先文法可能不存在算符优先函数与之对应。 (√ ) 4.语法分析时必须先消除文法中的左递归 。 (×) 5.LR分析法在自左至右扫描输入

文***品 5年前 上传1770   0

西电编译原理上机报告DBMS的设计与实现

编译原理上机报告《DBMS的设计与实现》学号: 姓名: 手机: 邮箱: 完成时间:2013 年X月X日目 录1. 项目概况 31.1 基本目标 31.2 完成情况 32. 项目实现方案 42.1 逻辑结构与物理结构 42.2 语法结构与数据结构 72.3 执行流程 1

z***u 2年前 上传322   0

《数据库原理及应用》实验报告

 数据库原理及应用 实验报告 实验课程: 学 号: 学生姓名: 班级: XXX年

文***享 5年前 上传4493   0

计算机组成原理实验报告

计算机组织与体系结构实 验 报 告评 语:成绩教 师: 年 月 日班 级: ________学 号: ____________姓 名: ______实验地点: E-Ⅱ区 311 _实验时间: 第三批 实验一 存储器实验

z***u 1年前 上传441   0

计算机组成原理实验报告 (2)

计 算 机 组 成 原 理 实 验 报 告Computer Organization Lab Reports______________________________________________________________________________班级: ___ 姓名:__ _ 学号:_____ 实验日期:_____________学院: ___ _ 专业:_ ___

z***u 1年前 上传488   0

编译原理课程设计LR(0)分析器自动构造程序

XX学院工科课程设计 -《编译原理》课程设计报告 题 目: LR(0)分析器自动构造程序的实现 学 号: 姓 名: 班 级:

文***品 2年前 上传401   0

语义分析与中间代码生成天津理工大学编译原理实验3

实验报告学院(系)名称:计算机与通信工程学院姓名学号专业班级实验项目实验三:语义分析与中间代码生成课程名称编译原理课程代码实验时间实验地点计算机软件实验室计算机软件实验室批改意见成绩教师签字: 实验内容:可选择LL1分析法、算符优先分析法、LR分析法之一,实现如下表达式文法的语法制导翻译过程。文法G[E]

文***品 1年前 上传243   0

实验1指导实验环境的建立和程序的编译

实验1指导:实验环境的建立和程序的编译、调试和运行一、实验环境的建立〔一〕 下载工具文件或者 :// tjut.edu :8080/xuebao/hbyy下载以下两个压缩文件:〔1〕编译器MASM6.15〔MASM615.rar〕〔2〕编辑工具TextPad〔TextPad.rar〕分别对上述文件进行解压缩。其中编译器解压到MASM615文件夹内;TextPad解压到

郭***林 2年前 上传471   0

大学微型计算机原理及应用本科实验报告

本科实验报告课程名称: 微型计算机原理及应用 实验项目: 多位十进制数相加 实验地点: 博学馆四层微机实验室 专业班级: 学 号: 学生姓名: 指导教师:

z***u 1年前 上传405   0