实验四 用YACC实现的语法分析器.pdfVIP

  • 40
  • 0
  • 约4.12千字
  • 约 5页
  • 2020-10-05 发布于浙江
  • 举报
4 Yacc 实验 用 工具构造语法分析器 一、实验目的 掌握移进-归约技术语法分析技术,利用语法分析器生成工具Yacc/Bison 实 现语法分析器的构造。 二、实验内容 利用语法分析器生成工具Yacc/Bison 编写一个语法分析程序,与词法分析器 结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子。 三、实验要求 1.个人完成,提交实验报告。 2.实验报告中给出采用测试源代码片断,及其对应的最右推导过程 (形式可以 自行考虑,如依次给出推导使用的产生式)。 例如,程序片断 四、实验步骤 1、根据文法编写.y文件: %{ #includectype.h #includestdio.h #defineYYSIYPEdouble voidyyerror(char *s) { printf(%s\n,s); } %} %tokenNUM %tokenBASICIF ELSEDOBREAK REALTRUE FALSEIDLE INDEX %tokenWHILEAND OREQNE GE %left +- %left */ %rightUMINUS %% program :block {printf(program-block\n);} ; block:{declsstmts} {printf(block-decls stmts\n);} ; decls :declsdecl {printf(decls-declsdecl\n);} | {printf(\decls-E\n);} ; decl :typeID ; {printf(decl-typeid\n);} ; type :type[NUM ] {printf(type-type [num]\n);} |BASIC {printf(type-basic\n);} ; stmts :stmts stmt {printf(stmts-stmts stmt\n);} | {printf(stmts-E\n);} ; stmt :loc bool; {printf(stmt-loc bool\n);} |IF (bool) stmt {printf(stmt-if(bool) stmt\n);} |IF (bool) stmt ELSE stmt {printf(stmt-if(bool) stmt else stmt\n);} |WHILE (bool)stmt {printf(stmt-while(bool) stmt\n);} |DO stmtWHILE (bool); {printf(stmt--do stmtwhile(bool)\n);} |BREAK ; {printf(stmt-break\n);} |block {printf(stmt-block\n);} ; loc :loc[bool] {printf(loc-loc[bool]\n);} |ID {printf(loc-id\n);} ; bool :boolORjoin {printf(bool-bool||join\n);} |join {printf(bool-join\n);} ; join :joinAND equality {printf(join-join equality\n);} |equality {printf(join-equality\n);} ; equality :equality EQrel {printf(equality-equality rel\n);} |equa

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档