递归下降分析

递归下降分析

ID:40896398

大小:28.98 KB

页数:13页

时间:2019-08-10

递归下降分析_第1页
递归下降分析_第2页
递归下降分析_第3页
递归下降分析_第4页
递归下降分析_第5页
资源描述:

《递归下降分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译原理实验——递归下降分析实验1.2递归下降分析1.实验目的加深递归下降的理解2.实验平台VC++6.0+Flex3.实验内容选择一个文法或自己设计一个文法写出文法接受的语言。针对文法手工构造递归下降分析程序实现下列功能:输入一个符号串,输出文法分析的结果,接受或拒绝。从文件中读入若干符号串,依次分析文法的结果。4.实验步骤1.选择语言:T0语言Program®BEGINStmt-ListENDStmt-List®Stmt-ListStmt//左递归

2、StmtStmt®Assign-stmtAssign-stmt®ID=Expr;Expr®ExprAdd-OpTerm//左递归

3、

4、TermTerm®TermMultiple-OpFactor//左递归

5、FactorFactor®(Expr)

6、ID

7、NUMAdd_Op®+

8、-Multiple_Op®*

9、/文法含有左递归,手工消除左递归。2.消除左递归后的文法:Program®BEGINStmt-ListENDStmt-List®StmtStmt-List’Stmt-List’®StmtStmt-List’

10、ϵStmt®Assign-stmtAssign-stmt®ID=Expr;Expr®TermExpr’Expr’®Add-OpTermExpr’

11、ϵTerm®FactorTerm’Term’®Multiple

12、-OpFactorTerm’

13、ϵFactor®(Expr)

14、ID

15、NUMAdd_Op®+

16、-Multiple_Op®*

17、/3.求出文法各个非终极符的FIRST集和FOLLOW集非终极符是否可推导为空FIRST集FOLLOW集ProgramBEGIN$Stmt-ListIDENDStmt-List’ϵIDϵENDStmtIDENDAssign-stmtIDENDExpr(,ID,NUM,;)Expr’ϵ+-,ϵ;)Term(,ID,NUM,+-;)Term’ϵ*/ϵ+-;)Factor(,ID,NUM,*/Add_Op+-(,ID,NUM,Multiple_Op*/(,ID,NUM根

18、据FIRST和FOLLOW集可以判读消除左递归后的文法为LL(1)文法,可以进行自上而下的文法分析根据个各非终极符产生式和FIRST和FOllOW集构造递归下降分析:利用lex自动工具生成词法分析部分。然后根据lex识别的串进行文法的分析,输出结果:失败匹配或成功匹配。1.实验源码本代码利用FLEX编译后用VC++编译生成的lex.yy.c文件;FILE:t8.lex%{#include#includecharch;//全局变量盛放识别的串的标识//函数声明P();//Program产生式L();//Stmt-List产生式L1();//S

19、tmt-List’S();//StmtA();//Assign-stmtE();//ExprE1();//Expr’T();//TermT1();//Term’F();//FactorO();//Add_OpM();//Multiple_Op%}%%BEGIN{ch='b';return;}END{ch='e';return;}[tr]*{ch='k';return;}[a-zA-Z][a-zA-Z0-9]*{ch='i';return;}[0-9][0-9]*{ch='n';return;}[+]{ch='+';return;}[-]{ch='-';return;}[*]

20、{ch='*';return;}[/]{ch='/';return;}[=]{ch='=';return;}[;]{ch=';';return;}[(]{ch='(';return;}[)]{ch=')';return;}.{ch='X';return;}%%intyywrap(void){return1;}main(){voidnext1();yyin=fopen("hh.c","r");//lex读取文件next1();//是指针移到开始符号printf("匹配中");P();//匹配函数调用}voidnext1(){//去下个被识别串的标识yylex();if(ch=='k'

21、){next1();}}//intP(){if('b'==ch){next1();L();printf(".");if('e'==ch){printf("-----------------------");printf("----------成功---------");printf("-----------------------");next1();return0;}else{printf("---------失败----------");e

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。