logo资料库

编译原理实验报告.doc

第1页 / 共52页
第2页 / 共52页
第3页 / 共52页
第4页 / 共52页
第5页 / 共52页
第6页 / 共52页
第7页 / 共52页
第8页 / 共52页
资料共52页,剩余部分请下载后查看
实验1 词法分析
1.1 实验目的
1.2 实验任务
1.3 实验内容
1.3.1 实验要求
1.3.2 输入格式
1.3.3 输出格式
1.3.4算法描述
1.3.5程序源码
1.3.6运行截图
1.4 心得体会
实验2 语法分析程序
2.1 实验目的
2.2 实验任务
2.3 实验内容
2.3.1实验要求
2.3.2输入格式
2.3.3输出格式
2.3.4提交要求
2.3.5算法描述
2.3.6程序清单
2.3.7调试情况及各种情况运行结果截图
2.4 心得体会
实验3 基于 LR(0)方法的语法分析
3.1 实验目的
3.2 实验任务
3.3 实验内容
3.3.1实验要求
3.3.2输入格式
3.3.3输出格式
3.3.4算法描述
3.3.5代码:
3.3.6调试情况及各种情况运行结果截图
3.4 心得体会
实验4 语义分析和中间代码生成
4.1 实验目的
4.2 实验任务
4.3 实验内容
4.3.1实验要求
4.3.2输入格式
4.3.3输出格式
4.3.4算法描述
4.3.5 程序源码
4.3.6运行截图
4.4 心得体会
编译原理实验报告 Compilers Principles Experiment Report 学 班 姓 学 院:信息科学与工程学院(软件学院) 级: 名:xxx 号: 指导教师: 教 务 处 2020 年 9 月
目 录 实验 1 词法分析 .............................................................................................................................................3 1.1 实验目的 .......................................................................................................................................................3 1.2 实验任务 .......................................................................................................................................................3 1.3 实验内容.......................................................................................................................................................3 1.3.1 实验要求...............................................................................................................................................3 1.3.2 输入格式...............................................................................................................................................3 1.3.3 输出格式...............................................................................................................................................3 1.3.4 算法描述................................................................................................................................................3 1.3.5 程序源码................................................................................................................................................4 1.3.6 运行截图................................................................................................................................................7 1.4 心得体会 ......................................................................................................................................................8 实验 2 语法分析程序 ...................................................................................................................................10 2.1 实验目的 .................................................................................................................................................... 10 2.2 实验任务 .................................................................................................................................................... 10 2.3 实验内容.................................................................................................................................................... 10 2.3.1 实验要求............................................................................................................................................. 10 2.3.2 输入格式............................................................................................................................................. 10 2.3.3 输出格式............................................................................................................................................. 10 2.3.4 提交要求............................................................................................................................................. 10 2.3.5算法描述............................................................................................................................................10 2.3.6 程序清单..............................................................................................................................................15 2.3.7 调试情况及各种情况运行结果截图..................................................................................................22 2.4 心得体会 .................................................................................................................................................... 24 实验 3 基于 LR(0)方法的语法分析 ............................................................................................................. 24 3.1 实验目的 .................................................................................................................................................... 24 3.2 实验任务 .................................................................................................................................................... 25 3.3 实验内容.................................................................................................................................................... 25 3.3.1 实验要求..............................................................................................................................................25 3.3.2输入格式............................................................................................................................................25 3.3.3输出格式............................................................................................................................................25 3.3.4 算法描述..............................................................................................................................................25 3.3.5 代码:..................................................................................................................................................26 3.3.6 调试情况及各种情况运行结果截图..................................................................................................31 3.4 心得体会 .................................................................................................................................................... 33 实验 4 语义分析和中间代码生成................................................................................................................34 4.1 实验目的 .................................................................................................................................................... 34 4.2 实验任务 .................................................................................................................................................... 34 4.3 实验内容.................................................................................................................................................... 34 4.3.1 实验要求.............................................................................................................................................34 4.3.2 输入格式.............................................................................................................................................36 1
4.3.3 输出格式.............................................................................................................................................36 4.3.4 算法描述..............................................................................................................................................37 4.3.5 程序源码.............................................................................................................................................38 4.3.6 运行截图..............................................................................................................................................49 4.4 心得体会 .................................................................................................................................................... 49 2
编译原理 实验报告 实验 1 词法分析 1.1 实验目的 (1)理解有穷自动机及其应用。 (2)掌握 NFA 到 DFA 的等价变换方法、DFA 最小化的方法。 (3)掌握设计、编码、调试词法分析程序的技术和方法。 1.2 实验任务 借助词法分析工具 GNU Flex,编写一个对使用 C--语言书写的源代码进行词法分 析(C--语言的文法参见附录 A),并使用 C 语言完成 1.3 实验内容 1.3.1 实验要求 你的程序要能够查出源代码中可能包含的词法错误:词法错误(错误类型 A):(以 输入 C--源代码为例)即出现 C--词法中未定义的字符。 1.3.2 输入格式 你的程序的输入是一个包含 C--源代码的文本文件,程序需要能够接收一个输入文件名 作为参数。例如,假设你的程序名为 cc、输入文件名为 test1、程序和输入文件都位于 当前目录下,那么在 Linux 命令行下运行./cc test1 即可获得以 test1 作为输入文件的 输出结果。 1.3.3 输出格式 通过标准输出打印程序的运行结果。对于那些包含词法错误的输入文件,只 要输出相 关的词法有误的信息即可。在这种情况下,注意不要输出任何与语法树有关的内容。 要 求输出的信息包括错误类型、出错的行号以及说明文字,其格式为:Error type [错误类 型] at Line [行号]: [说明文字] 对于那些没有任何词法错误的输入文件,你的程序需要打印每一个词法单元的名称以及 与其对应的词素,无需打印行号。词法单元名与相应词素之间以一个冒号和一个空格隔 开。每一条词法单元的信息单独占一行。 1.3.4 算法描述 (1)设计思路 3
编译原理 实验报告 主要实现按语言的词法规则从源程序中逐个识别单词,把字符串形式的源程序转化成单 词串的形式,并做相应的分类。对一个完整的模块分为输入,处理,输出三部分。 输入,编写 flex 源文件,对 c 语言的关键字,运算符,标识符,常量,界符依据其特征 写出相应正规式。 处理,为正规式,编写识别规则,并要考虑分析过程中优先级问题。 输出,调用相关函数,将单词串写到 txt 文本文件。 (2)识别规则算法实现 借助 flex 自带的动作函数 yytext,指向与正规式匹配的待分析的字符,再由 Fprintf 函 数将字符写入指定文件,yylineno 记录字符所在的行数。 (3)输出算法实现 定义两个文本文件,分别存储正确的及有错误的单词串。设置全局变量 flag,识别过程中 若有错误,flag 变化。分析完后判断,flag 是否发生变化,若发生变化,删除多余文件, 重命名另一个文件。 1.3.5 程序源码 定义%{ FILE*yycout=NULL; intflag=0; %} %optiondebug %optionyylineno INT_DEX[1-9][0-9]*|[0] INT_HEX[0][Xx]([1-9][0-9]*|[0]) INT_OCT[0][0-7] FLOAT TYPEint|float ID[a-zA-Z_][a-zA-Z_0-9]* [0-9]*[.][0-9]+([eE][+-]?[0-9]*|[0])?f? 4
编译原理 实验报告 IF[if] ELSE[else] WHILE[while] STRUCT[struct] RETURN[return] SPACE[\n\t] SEMI [;] COMMA [,] ASSIGNOP[=] RELOP[>]|[<]|[>][=]|[<][=]|[=][=]|[!][=](^[=]) [+] PLUS MINUS[-] STAR[*] DIV[/] AND[&][&] OR[|][|] DOT[.] NOT[!] LP\(RP\) LB\[RB\] LC\{RC\} SEP[^;,\n\t\(\)\[\]\{\}\+\/\*<>=!&\|-]+ NOTE\/\/.*\n %%{INT_DEX}|{INT_HEX}|{INT_OCT}{fprintf(yycout,"INT:%s\n",yytext);} 识别规则 5
编译原理 实验报告 {FLOAT} {fprintf(yycout,"FLOAT:%s\n",yytext);} {TYPE}{fprintf(yycout,"TYPE:%s\n",yytext);} {ID}{fprintf(yycout,"ID:%s\n",yytext);} {IF}{fprintf(yycout,"IF:%s\n",yytext);} {ELSE}{fprintf(yycout,"ELSE:%s\n",yytext);} {WHILE}{fprintf(yycout,"WHILE:%s\n",yytext);} {STRUCT}{fprintf(yycout,"STRUCT:%s\n",yytext);} {RETURN}{fprintf(yycout,"RETURN:%s\n",yytext);} {SPACE}{} {SEMI}{fprintf(yycout,"SEMI:%s\n",yytext);} {COMMA}{fprintf(yycout,"COMMA:%s\n",yytext);} {ASSIGNOP}{fprintf(yycout,"ASSIGNOP:%s\n",yytext);} {RELOP}{fprintf(yycout,"RELOP:%s\n",yytext);} {PLUS}{fprintf(yycout,"PLUS:%s\n",yytext);} {MINUS}{fprintf(yycout,"MINUS:%s\n",yytext);} {STAR}{fprintf(yycout,"STAR:%s\n",yytext);} {DIV}{fprintf(yycout,"DIV:%s\n",yytext);} {AND}{fprintf(yycout,"AND:%s\n",yytext);} {OR}{fprintf(yycout,"OR:%s\n",yytext);} {DOT}{fprintf(yycout,"DOT:%s\n",yytext);} {NOT}{fprintf(yycout,"NOT:%s\n",yytext);} {LP}{fprintf(yycout,"LP:%s\n",yytext);} {RP}{fprintf(yycout,"RP:%s\n",yytext);} {LB}{fprintf(yycout,"LB:%s\n",yytext);} {RB}{fprintf(yycout,"RB:%s\n",yytext);} {LC}{fprintf(yycout,"LC:%s\n",yytext);} {RC}{fprintf(yycout,"RC:%s\n",yytext);} {NOTE}{fprintf(yycout,"NOTE:%s\n",yytext);} {SEP}{ at A fprintf(yyout,"Error type Line %d:Mysterious character 6
分享到:
收藏