欢迎来到天天文库
浏览记录
ID:56769390
大小:77.00 KB
页数:5页
时间:2020-07-08
《实验四 用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->expr23、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+ter27、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
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
此文档下载收益归作者所有