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

热门搜索

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

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

文***享

贡献于2022-07-19

字数:4591

编译原理语法分析实验报告
软工班
实验容
二 实验目
三 实验求
四 程序流程图
l 函数
l scanner()
l irparser()函数
l yucu() *语句串分析*
l statement()*语句分析函数*
l expression()*表达式分析函数*
l term()*项分析函数*
l factor()*子分析函数*
五 程序代码
六 测试例
七 输出结果
八 实验心






实验容:
编写文关文法构造递降语法分析程序输入串进行语法分析检查程序求输入串进行递降语法分析判程序否符合已知语法规果符合(编译出错)输出错误信息

二实验目:
构造文法语法分析程序求采递降语法分析方法输入字符串进行语法分析实现词法分析程序提供单词序列语法检查结构分析进步掌握递降语法分析方法

三实验求:
利C语言编制递降分析程序Training语言进行语法分析
1. 分析Training语言语法
扩充表示:
<程序>>function<语句串>endfunc
<语句串>><语句>{<语句>}
<语句>à<赋值语句>
<赋值语句>àIDà<表达式>
<表达式>à<项>{+<项>|<项>}
<项>à<子>{*<子>|<子>}
<子>àID|NUM|(<表达式>)

备注:实验中 程序进行扩展增加程序识if条件判断语句while循环语句功
2. 实验求说明
输入单词串#结束果文法正确句子输出成功信息印success否输出error

四程序流程图
函数:

Scanner()函数:

irparser()函数

yucu() *语句串分析*

statement()*语句分析函数*

expression()*表达式分析函数*

term()*项分析函数*

factor()*子分析函数*


五程序代码:
递降分析文法
<程序>>function< 语句串 >endfunc
<语句串>><语句>{ <语句> }
<语句>à<赋值语句> | |
<赋值语句>à <表达式>
<表达式>à<项>{ +<项> | <项> }
<项>à<子>{*<子>|<子>}
<子>àID | NUM | (<表达式>)
à(<表达式>)| (ID) |(NUM)à<语句>
à(<表达式>)| (ID) |(NUM)à<语句>

备注:红色字体部分代码实现功修改扩展部分
*语法分析源代码*
#include
#include
char prog[80]token[8]
char ch
int synpm0nsumkk0
char *rwtab[6]{functionifthenwhiledoendfunc}
void yucu()
void expression()
void statement()
void factor()
void term()
void irparser()
void scaner()
{ for (n0n<8n++)
token[n]NULL
while(ch' ' || ch'\n')
chprog[p++]
m0
if((ch<'z' && ch>'a') || (ch<'Z' && ch>'A'))
{while((ch<'z' && ch>'a') || (ch<'Z' && ch>'A') || (ch<'9' && ch>'0'))
{token[m++]ch
chprog[p++]
}
syn10
for(n0n<6n++)
if(strcmp(tokenrwtab[n])0)
{ synn+1
break
}
token[m++]'\0'}
else
if(ch<'9' && ch>'0')
{ sum0
while(ch<'9' && ch>'0')
{ sumsum*10+ch'0'
chprog[p++]
}
syn11
}
else
{ switch(ch)
{ case'<'m0token[m++]ch
chprog[p++]
if(ch'')
{syn22
token[m+1]ch}
else
{syn20chprog[p]}
break
case'>'m0token[m++]ch
chprog[p++]
if(ch'')
{ syn24
token[m++]ch
}
else
{syn23p
}
break
case'' m 0token[m ++ ]ch
chprog[p++]
if(ch'')
{ syn 25
token[m++] ch
}
else
{syn18
chprog[p]
}
break
case''m0 token[m++] ch
chprog[++p]
if(ch'')
{ syn22
token[m++] ch
}
else
syn1
break
case'+'syn13 token[0]chbreak
case''syn14 token[0]chbreak
case'*'syn15 token[0]chbreak
case''syn16 token[0]chbreak
case''syn26 token[0]chbreak
case'('syn27 token[0]chbreak
case')'syn28 token[0]chbreak
case'#'syn0 token[0]chbreak
defaultsyn1break
}
chprog[p++]
} }
void irparser()
{ if(syn1)
{ scaner()
yucu()*语句串分析*
if(syn6) *读endfunc*
{ scaner()
if(syn0&&kk0)*程序分析识完*
printf(success)
}
else
{ if(kk1) *没endfunc结束*
{ printf(errorneed 'endfunc')
kk1
}
}
}
else
{ printf(errorneed'function')
kk1
}
}
void yucu() *语句串分析*
{ statement()*调语句分析函数*
while(syn26)*语句识结束继续识*
{ scaner()
statement()
}
return
}
void statement()*语句分析函数*
{ if(syn10)
{ scaner()
if(syn18) 果赋值语句
{ scaner()
expression()
} 程实现语法分析判断语句
else
{ printf(errorevaluate tag error)
kk1
}
}
else
if(syn6)
return
else
if(syn2) 果条件判断语句 判断条件表达式语法
{ scaner()
if(syn27) 判断括号匹配
{do
{scaner() 进入括号部进行表达式分析
expression()
}while(syn28)
}
else { printf(error need another')')
kk1
} ()判断完成
scaner() 然进行语句块分析
statement()
} 里实现判断if语句语法分析
类似里添加 循环语句
else
if(syn4) 果循环语句 判断条件表达式语法
{ scaner()chprog[p++]
if(syn27)
{ do
{scaner()
expression()
}while(syn28)
}
else {
printf(error need another')')
kk1 } ()判断完成
scaner() 然进行语句块分析
statement()
} 里实现判断while语句语法分析
else
{ printf(errorthe statement error)
kk1
}
}
void expression()*表达式分析函数*
{ term()
while(syn13||syn14)
{ scaner()
term() }
return
}
void term()*项分析函数*
{ factor()
while(syn15||syn16)
{ scaner()
factor()}
return
}
void factor()*子分析函数*
{ if(syn10||syn11)
{ scaner() }
else*否表达式*
{ expression()
if(syn27)
{ scaner()
expression()
if(syn28)
{ scaner()}
else
{ printf(error need another')')
kk1
}
}
else
{ printf(error expression error)
}
}
}
void main()
{ p0
printf(\n please input the string\n)
do
{ chgetchar()
prog[p++]ch
} while(ch'#')
p0
chprog[p++]
scaner()
irparser()
}
六测试例
测试例1
输出结果

测试例2
输出结果

测试例3
输出结果
function
a1
b2
ca+b
endfunc
#
success
function
if(3>1)
a1
endfunc
#

success
function
if(a>b)
a1
while(a>1)
b1
endfunc
#

success
测试例4

a1
endfunc
#
输出结果
errorneed'function'Press any key to continue

七输出结果
测试例1

测试例2

测试例4

测试例3

八实验心
通编译原理实验二语法分析实验语法分析流程更深刻解语法分析递思想更加具体化然源代码非设计调试程序程中逐步理解程序递降思想思路断理清仅理解程序分析赋值语句算法时基础程序做功扩展增加语法分析条件判断语句while条件循环语句程序中红色字体部分调试算法功扩展程中理清语法分析程序思路开始程序陌生逐步解程序流程耐心步步理解程序思想次次更改测试例遍遍调试终终预期答案次实验理语法分析递降理解更加具体清晰受益匪浅









文档香网(httpswwwxiangdangnet)户传

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

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

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

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

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

购买文档

相关文档

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

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

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

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

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

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

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

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

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

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

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

文***享 1年前 上传402   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年前 上传412   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年前 上传302   0

编译原理实验指导书

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

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

编译原理课后习题答案

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

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

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

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

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

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

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

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

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

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

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

编译原理期末试题附答案

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

计算机组成原理实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

语法分析预测分析方法

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

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

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

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

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