- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理语法分实验报告
南华大学
计算机科学与技术学院
实 验 报 告
( 2007 ~2008 学年度 第二学期 )
课程名称 编译原理
实验名称 语法分析
姓名 寻友旭 学号 座机电话号码227
专业 软件工程 班级 软件工程052班
地点 6—413 教师 陈星 1.实验目的及要求 编制一个递归下降分析程序,实现对词法分析程序所提供得单词序列得语法检查和结构分析。
软件、硬件环境
VC6.0
要求: 利用C语言编制递归下降分析程序,并对简单语言进行语法分析。 待分析的简单语言得语法:
EàE+T | E-T | T
TàT*F | T/F |F Fà E | i 输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“Accept! Right Expression!”,否则输出“Error!!!”。
语法分析:
a ∵E E+T E+T*F E+T* E 即有E E+T* E 存在左递归。用直接改写法消除左递归,得到如下:
E à TE’
E’ à +TE’ | ?TE’|ε
T à FT’
T’ à *FT’ | /FT’|ε
F à E | i
b 对于以上改进的方法。可得:
对于E’:? FIRST E’ FIRST +TE’ ∪FIRST -TE’ ∪ ε +,?,ε 对于T’: FIRST T’ FIRST *FT’ ∪FIRST /FT’ ∪ ε *,∕,ε 而且: FIRST E FIRST T FIRST F FIRST E ∪FIRST i ,i 由此我们容易得出各非终结符的FOLLOW集合如下:
FOLLOW E ,#
FOLLOW E’ FOLLOW E ,#
FOLLOW T FIRST E’ \ε∪FOLLOW E’ +,?, ,#
FOLLOW T’ FOLLOW T +,?, ,#
FOLLOW F FIRST T’ \ε∪FOLLOW T’ *,∕,+,?, ,#
由以上FOLLOW集可以我们可以得出SELECT集如下:
对E SELECT(EàTE’) FIRST TE’ FIRST T ,i
对E’ SELECT(E’ à+TE’) + SELECT(E’ à ?TE’) ? SELECT(E’ àε) ε, ,#
对T SELECT(TàFT’) ,i
对T’ SELECT(T’ à*FT’) * SELECT(T’ à ∕FT’) ∕
SELECT(T’ àε) ε,+,?, ,#
对F SELECT(Fà E ) SELECT(Fài) i
∴ SELECT E’ à+TE’ ∩SELECT(E’ à ?TE’)∩SELECT(E’ àε) F
SELECT T’ à*FT’ ∩SELECT(T’ à ∕FT’)∩SELECT(T’ àε) F
SELECT(Fà E )∩SELECT(Fài) F
由上可知,有相同左部产生式的SELECT集合的交集为空,所以文法是LL(1)文法。因此,转化后的文法可以用递归下降分析法作语法分析。
2.实验步骤
分析试验资料,结合书本得出实验大体思路;
根据资料画出语法分析程序的流程图;
根据流程图与程序大体框架完善程序;
将代码输入电脑中,调试;
根据资料中数据测试程序得基本功能;
根据测试结果,设计测试数据完善程序;
根据实验结果分析总结。
3. 实验内容
词法分析程序的主要子函数模块流程图
\
程序:
#include
#include
#include
#include
char a[50] ,b[50],d[200],e[10];
char ch;
int n1,i1 0,flag 1,n 5;
int total 0;
int E ;
int E1 ;
int T ;
int G ;
int S ;
int F ;
void input ;
void input1 ;
void output ;
void main /*递归分析*/ int f,p,j 0; char x; d[0] E; d[1] ; d[2] ; d[3] T; d[4] G; d[5] #; printf Please input character string length 50,end of # :\n ; do scanf %c,ch ; a[j] ch; j++; while ch! # ; n1 j; ch b[0] a[0]; printf 步骤\t文法\t分析串\t\t分析字符\t剩余串\n ; f E1 ;
文档评论(0)