实验四 用Yacc实现的语法分析器.doc

实验四 用Yacc实现的语法分析器.doc

ID:56769390

大小:77.00 KB

页数:5页

时间:2020-07-08

实验四 用Yacc实现的语法分析器.doc_第1页
实验四 用Yacc实现的语法分析器.doc_第2页
实验四 用Yacc实现的语法分析器.doc_第3页
实验四 用Yacc实现的语法分析器.doc_第4页
实验四 用Yacc实现的语法分析器.doc_第5页
资源描述:

《实验四 用Yacc实现的语法分析器.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验4用Yacc工具构造语法分析器一、实验目的掌握移进-归约技术语法分析技术,利用语法分析器生成工具Yacc/Bison实现语法分析器的构造。二、实验内容利用语法分析器生成工具Yacc/Bison编写一个语法分析程序,与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子。三、实验要求1.个人完成,提交实验报告。2.实验报告中给出采用测试源代码片断,及其对应的最右推导过程(形式可以自行考虑,如依次给出推导使用的产生式)。例如,程序片断四、实验步骤1、根据文法编写.y文件:%{#include#include#defineYYSIYP

2、Edoublevoidyyerror(char*s){printf("%s",s);}%}%tokenNUM%tokenBASICIFELSEDOBREAKREALTRUEFALSEIDLEINDEX%tokenWHILEANDOREQNEGE%left'+''-'%left'*''/'%rightUMINUS%%program:block{printf("program->block");};block:'{'declsstmts'}'{printf("block->declsstmts");};decls:declsdecl{printf("decls->declsdecl

3、");}

4、{printf("decls->E");};decl:typeID';'{printf("decl->typeid");};type:type'['NUM']'{printf("type->type[num]");}

5、BASIC{printf("type->basic");};stmts:stmtsstmt{printf("stmts->stmtsstmt");}

6、{printf("stmts->E");};stmt:loc'='bool';'{printf("stmt->loc=bool");}

7、IF'('bool')'stmt{printf("stm

8、t->if(bool)stmt");}

9、IF'('bool')'stmtELSEstmt{printf("stmt->if(bool)stmtelsestmt");}

10、WHILE'('bool')'stmt{printf("stmt->while(bool)stmt");}

11、DOstmtWHILE'('bool')'';'{printf("stmt->->dostmtwhile(bool)");}

12、BREAK';'{printf("stmt->break");}

13、block{printf("stmt->block");};loc:loc'['bool']'{printf

14、("loc->loc[bool]");}

15、ID{printf("loc->id");};bool:boolORjoin{printf("bool->bool

16、

17、join");}

18、join{printf("bool->join");};join:joinANDequality{printf("join->join&&equality");}

19、equality{printf("join->equality");};equality:equalityEQrel{printf("equality->equality==rel");}

20、equalityNErel{printf

21、("equality->equality!=rel");}

22、rel{printf("equality->rel");};rel:expr'<'expr{printf("rel->expr

23、exprLEexpr{printf("rel->expr<=expr");}

24、expr'>'expr{printf("rel->expr>expr");}

25、exprGEexpr{printf("rel->expr>=expr");}

26、expr{printf("rel->expr");};expr:expr'+'term{printf("expr->expt+ter

27、m");}

28、expr'-'term{printf("expr->expr-term");}

29、term{printf("expr->term");};term:term'*'unary{printf("term->term*unary");}

30、term'/'unary{printf("term->term/unary");}

31、unary{printf("term->unary

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

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

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