资源描述:
《实验四用yacc实现的语法分析器》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验4用Yacc工具构造语法分析器一、实验目的掌握移进-归约技术语法分析技术,利用语法分析器生成工具Yacc/Bison实现语法分析器的构造。二、实验内容利用语法分析器生成工具Yacc/Bison编写一个语法分析程序,与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子。三、实验要求1.个人完成,提交实验报告。2.实验报告中给出采用测试源代码片断,及其对应的最右推导过程(形式可以自行考虑,如依次给出推导使用的产生式)。例如,程序片断、实验步骤1、根据文法编写.y文件%(
2、#includc#include#defineYYSIYPEdoublevoidyyerror(char*s){printf("%s",s);}%}%tokenNUM%tokcnBASICIFELSEDOBREAKREALTRUEFALSEIDLEINDEX%tokenWHILEANDOREQNEGE%left%left,*,7,%rightUMINUS%%program:block{printf("program->block");)♦block:r{
3、'deckstmts”•{printf("block-〉declsstmtsH);}dccls:dcclsdeci{printf(ndccls->dcclsdeclXn'1);}
4、{printfrdecls->E");}參deci:typeIDV{printf("decl-〉typeidH);}type:type’[•NUM■]’{printf(ntypc->typc[num]H);J
5、BASIC{printf("type->basic");)參stmts:stmtsstmt
6、{printf(Hstmts->stmtsstmtVn”);}
7、{printf(,'stmts->EM);)♦stmt:loc*='boolV
8、printf("stmt->loc=bool");}
9、IF'('bool•)’stmt{printf("stmt->if(bool)stmt");)
10、IF’(’bool')'stmtELSEstmt{printff'stmt->if(bool)stmtelsestmt”);}
11、WHILE'('bool1)’stmt(printf("stmt
12、->while(bool)stmtM);}
13、DOstmtWHILE'('bool{printf("stmt->->dostmtwhile(bool)");}IBREAK7{printf(nstmt->breakH);}
14、block(printf(Hstmt->blockH);)♦loc:loc•[’bool•]’{printf("loc->lo€[bool],');)
15、ID{printf(”loc->id");}bool:boolORjoin{printf("bool-〉b
16、ool
17、(join");
18、
19、join(printf(Mbool->joinH);)♦join:joinANDequality{printf("join-〉join&&equality");}
20、equality{printf(njoin->cqualityH);(equality:equalityEQrel{printf(’%似吻-〉叫仙1“><==比111”):}IequalityNErel{printf(Hequality->equality!=reln);)
21、rel{pr
22、intf(nequality-〉rel");}rel:expr•<•expr{printf(’•rel-〉exprexpr<=exprH);)Iexpr.〉,expr{printf(Hrel->expr>exprH);)
23、exprGEexpr{printf(Hrel->expr>=expr");}
24、expr{printf(nrcl->cxprH);}expr:expr’+•term{printf(Hexp
25、r->expt+termH);)Iexprterm{printf(,,expr->expr-termH);)
26、term{printf(nexpr-〉term");}term:term•*’unary{printffterm-〉term*unary");}Iterm7unary{printf(Hterm->term/unaryH);}
27、unary{printf(Hterm->unaryH);)unary"!’unary{printf(Hunary->!unar