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

热门搜索

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

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

z***u

贡献于2022-11-12

字数:5645

实验34 预测分析表方法
班级:_ _ 学号:_ _ 姓名_ _ 分:_ _
实验目
理解预测分析表方法实现原理
二实验容:
编写通预测法分析程序求定错误处理力出错够程序继续运行直分析程结束通文法(通数表现)进行测试

二实验容提示
1.算法数构造:
构造终结符数组:char Vt[10][5]{id+……}
构造非终结符数组:char Vn[10]{ }
构造follow集数组:char *follow[10][10]{ } (follow集预测分析表合存放)
数构造示例(预测分析表构造方法1):
*data1h简单算术表达式数*
char VN[10][5]{EE'TT'F} 非终结符表
int length_vn5 非终结符数

char VT[15][5]{id+*()#} 终结符表
int length_vt6 终结符数

char Fa[15][10]{TE'+TE'FT'*FT'(E)id}
产生式表0E>TE' 1E'>+TE' 2E'>空
3T>FT' 4T'>*FT' 5T'>空 6F>(E) 7F>id

int analysis_table[10][11]{02201100000
21222200000
31231100000
25 425 500000
71161100000}
预测分析表2表示出错属终结符follow集合1表示该行终结符follow集合错误处理正数表示产生式数组Fa中编号右部五列0表示余列

(1) 预测分析表构造方法1
文法正规式编号:存放字符数组中0开始编号正规式编号该正规式数组中应标述Fa数组表示存储产生式
构造产生式数组:char P[10][10]{E>TE’E’>+TE’……} (产生式存储右半部分E>TE’存储TE’ 正规式中符号换E’改M )
构造预测分析表:int analyze_table[10][10]{ } 数组元素值存放产生式编号12表示出错
(2)预测分析表构造方法2
三维数组
Char analyze_table[10][10][10]{ }

Char *analyze_table[10][10]{ }

2.针预测分析表构造方法1查预测分析表方法提示:
(1) 查非终结符表非终结符序号no1
(2) 查终结符表终结符序号no2
(3) 根no1no2查预测分析表应正规式序号no3analyze_table[no1][no2] 果no31 表示出错
(4) 根no3查找应正规式Fa[no3]
(5) 正规式进行处理
3.错误处理机制
紧急方式错误恢复方法(抛弃某符号继续分析)
(1)栈顶非终结符A串中前单词属FOLLOW(A)栈中弹出A(时认输入串中缺少A表示结构)继续分析 错误编号1
(2)栈顶非终结符A串中前单词属FOLLOW(A)串指针移位置(认输入串中前单词余)继续分析错误编号2
(3)栈顶终结符等串中前单词栈中弹出终结符(认输入串中缺少前单词)者串指针移位置(认串中前单词余)程序中选择述两种 观点中种进行处理错误编号3
error()函数编写方式方式处理
Error(int errornum)
{
If(errornum1)………………
Else if(errornum2)……………
Else ………………
者choose case语句处理
}
4.增加错误处理预测分析程序预测分析程序算法:

#文法开始符次压入栈中
第输入符号读入a
do{
栈顶符号弹出放入x中
if(x∈VT)
{
if(x==a) 输入符号读入a
else error(3)
}
else
if(M[xa]=x→y1y2…yk)
{
逆序次ykyk−1…y1压入栈中
输出x→y1y2…yk
}
else if aÎfollow(x)error(1) else error(2)
前述数定义中查表1表示aÎfollow(x)
}while(x#)

三.实验求
定算术表达式文法编写程序
测试数:
1.算术表达式文法
E→TE’
E’ → +TE’| TE’|ε
T→FT’
T’ →*FT’ | FT’ |FT’|ε
F→(E) |id|num

定符合该文法句子id+id*id输入二元式序列(词法分析结果预测分析程序二元式中第元值):(id0)(+)(id1)(*)(id2)运行预测分析程序出分析程步分析结果
输出形式参考图(结束符):




2. 作业310 文法
四 实验程
源程序:
#include
#include
#include
#include
using namespace std
#define MAXSIZE 100
typedef char DataType
typedef struct 定义栈
{
DataType data[MAXSIZE]
int top
}SeqStack
SeqStack *s

int sign0
int num1num2num3

char VN[10][5]{EMTNF}非终结符表
int length_vn5非终结符数

char VT[15][5]{+*()in#}终结符表
int length_vt10 终结符数

char Fa[15][5]{TM+TMTMFN*FNFNFN(E)in}产生式表 1E>TM2M>+TM3M>TM4M> 5E>FN6N> 7N>*FN8F>FN9F>FN10F>(E)11F>i12f>n

Char Pa[15][10]{E>TMM>+TMM>TMM>空T>FNN>空N>*FNF>FNF>FNF>(E)F>idF>num}


int analysis_table[10][11]{ {11111121110}
{23111141140}
{22111525510}
{66789161160}
{22222102111210}
}预测分析表

SeqStack *Init_SeqSTACK()栈初始化
{
SeqStack *s
snew SeqStack
if(s)
{
printf(空间足\n)
return NULL
}
else
{
s>top1
return s
}
}
void Push_SeqStack(SeqStack *schar x)入栈
{
if (s>topMAXSIZE1)
printf(栈满入栈)return 0
else
{
s>top++
s>data[s>top]x
return 1
}

}
char Pop_SeqStack(SeqStack *s)出栈
{
if(s>top1)
{
printf(栈空出栈) return 0
exit(0)
}
else
{
char xs>data[s>top]
s>top
return x
}
}
DataType Top_SeqStack(SeqStack *s) 取栈顶元素
{
if(s>top1)
return 0
else
return s>data [s>top ]
}
int BufVT(char s) 接收终结符保存VT[]数组中
{
int i0
while(i<15&&s'\n')
{
if(VT[i][0]s)
return 1
else
i++
}
return 0
}
int BufVN(char s) 接收非终结符保存VN[]数组中
{
int i0
while(i<10&&s'\n')
{
if(VN[i][0]s)
return 1
else
i++
}
return 0
}
int VTT(char s) 终结符匹配
{
int i0
while((VT[i][0]s))
i++
return i
}
int VNN(char s) 非终结符匹配
{
int i0
while(VN[i][0]s&&i {
i++
}
if(ilength_vn)
return 1
return i

}


void Error(int errornumchar x)
{
if(errornum1)
{
printf(第种错误弹出栈顶元素\n)
Pop_SeqStack(s)
}
else if(errornum2)
printf(第二种错误跳c\nx)
else
{
if(x'#')
{
printf(第三种错误弹出栈顶元素\n)
Pop_SeqStack(s)
}
else
{
printf(第三种错误指针移弹出栈顶元素\n)
Pop_SeqStack(s)
sign++
}
}
}


void main()
{
char str1[20]str2[20]
int i0
printf(请输入分析文件名:)
scanf(sstr1)
FILE *fp
if((fpfopen(str1r))NULL)
{
printf(没文件\n)
exit(0)
}
while(feof(fp))
{

str2[i]fgetc(fp)
i++

}
str2[i]'\0'
fclose(fp)
Init_SeqSTACK()
s>top1
Push_SeqStack(s'#')
Push_SeqStack(s'E')
char x
printf(语法分析程:\n)
printf(栈顶元素\t\t前单词记号\t\t动作\n)
printf(\n)
do
{
xTop_SeqStack(s)
if(x'#')
goto loop
else
{
if(BufVT(str2[sign])&&BufVN(x))
{
printf(c\t\t\ts\t\t\tsxstr2[sign])
printf(前字符合法\n)
}

else if(BufVT(str2[sign]))
{
if(xstr2[sign])
{
printf(c\t\t\tc\t\t\txstr2[sign])
printf(匹配终结符c\nstr2[sign])
Pop_SeqStack(s)
sign++
}
else
{
BufVN(x)
num1VTT(str2[sign])
num2VNN(x)
char arr[10]
if(num21)
{
num3analysis_table[num2][num1]
if(num31)
{
printf(c\t\t\tc\t\t\txstr2[sign])
Error(1x)
}
if(num32)
{
printf(c\t\t\tc\t\t\txstr2[sign])
Error(2str2[sign])
sign++
}
else
{
printf(c\t\t\tc\t\t\txstr2[sign])
printf(展开非终结符s继续\nPa[num31])
Pop_SeqStack(s)
int j
for(j0j<5&&Fa[num31][j]'\0'j++)
{
arr[j]Fa[num31][j]
}
int k
kj1
for(k>0k)
{
Push_SeqStack(sarr[k])
}
}
}
else
{
printf(c\t\t\tc\t\t\txstr2[sign])
Error(3str2[sign])
Pop_SeqStack(s)
}
}
}
}
}while(x'#')
loop printf(c\t\t\tc\t\t\txstr2[sign])
printf(结束\n)
exit(0)
}
五. 实验结果
存入:i*(i+i)#

310文法



六. 心体会
次实验中学会预测表分析法基方法栈数结构进行复时学会预测表分析中follow集等方法创建语法分析进步掌握

文档香网(httpswwwxiangdangnet)户传

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

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

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

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

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

购买文档

相关文档

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

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

文***享 2年前 上传951   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

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

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

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

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

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

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

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

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

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

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

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

文***享 1年前 上传411   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

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

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

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

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

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

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

语法分析预测分析方法

实验2-1 语法分析—预测分析方法一、实验目的使用预测分析方法编制分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。了解预测分析法和递归子程序法的区别和联系,培养动手实践的能力。二、实验内容使用预测分析法分析一段程序代码。如果符合文法定义,程序输出“是”,否则输出“否”。由于预测分析和递归子程序都是自顶向下的分析方法,这里给出无回溯的和无左公因子的文法。无左递归和无左公

文***品 11个月前 上传291   0

编译原理实验报告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年前 上传307   0

编译原理课后习题答案

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

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

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

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

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

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

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

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

编译原理期末试题附答案

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

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

物流预测方法汇编

(事实上,需求预测必须将短期需求预测或生产进度安排与长期战略性需求预测有机结合起来,才会真正地起作用。短期预测是根据存储单位(SKU)水平做出的,它与销售、客户关系,以及依据预订库存或安排运输来实施计划的系统和软件等相互作用。相比之下,长期预测则是在更为集中的基础上作出的。在月度或季度时间段内,对一系列产品的生产做出预测,作为财务和产能计划的输入数据。长期预测必须在现有客户信息之外假设需求状况,

张***子 11年前 上传694   0

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

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

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

产品产销状况预测分析表

产品产销状况预测分析表 日期 月预计 月预计 月预计 月预计 客户名称 产品种类 期末 初期 生产量 交货量 期末 初期 生产量 交货量 期末 初期 生产量 交货量 期末 初期 生产量 交货量

n***1 10年前 上传21685   0

团队管理原理及方法

团队管理原理及方法【摘要】:本文以团队管理原理为指导,指出了团队建设和管理在现代企业管理中的地位和作用,挖掘了我国国有企业目前在团队建设和管理上存在的几种不良现象,提出了在企业单位中为什么要建立团队,加强团队建设可以起到哪些作用,以及如何建设和管理高效团队提出了几种方法:㈠组建高素质的团队,㈡培育团队精神,㈢加强团队成员之间的有效沟通,㈣创建学习型团队,㈤采取必要的激励措施。【关键词】:

f***6 12年前 上传915   0

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

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

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

2018年建筑能耗预测项目管理方法研究分析博士开题报告

建筑能耗预测项目管理方法研究分析博士开题报告  博士开题报告——我国建筑能耗预测项目管理方法研究分析  1研究背景及意义  1.1研究背景  西方发达国家在其发展过程中无节制地使用能源,直到20世纪70年代石油大幅度涨价使世界经济遭受到能源危机的沉重打击,世界各个国家才重视能源问题。由于能源资源条件的限制,新能源的开发在短期内也难以缓解能源供应的紧张局面,许多国家都把注意力集中在

m***w 6年前 上传535   0

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

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

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

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

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

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

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

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

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

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

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

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