教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

编译原理_实验报告

来源:网络收集 时间:2026-09-08
导读: 编译原理实验 编译原理实验报告 《编译原理》实验教学大纲 一、课程名称:编译原理(Principle of Compiler) 二、课程编码:4111204 三、课程总学时: 72 学时[理论: 54 学时;实验: 18 学时 四、课程总学分: 4 学分 五、适用专业和开课学期:计算机科学

编译原理实验

编译原理实验报告

《编译原理》实验教学大纲

一、课程名称:编译原理(Principle of Compiler)

二、课程编码:4111204

三、课程总学时: 72 学时[理论: 54 学时;实验: 18 学时

四、课程总学分: 4 学分

五、适用专业和开课学期:计算机科学与技术专业,第7学期。

六、实验的目的与任务:

编译原理是计算机类专业特别是计算机软件专业的一门重要专业课。设置该课程的目的在于系统地向学生讲述编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现技术,使学生通过学习既掌握编译理论和方法方面的基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力。编译原理是一门理论性和实践性都比较强的课程。进行上机实验的目的是使学生通过完成上机实验题目加深对课堂教学内容的理解。同时培养学生实际动手能力。

七、主要仪器设备及台(套)数:一人一机。

八、主要实验教材(指导书)及参考用书:

[1]《编译原理》,吕映芝、张素琴、蒋维杜,清华大学出版社,1998年出版

[2] 《编译程序设计原理》,杜书敏、王永宁,北京大学出版社,1988年出版

[3] 《计算机编译原理》,张幸儿,科学出版社,1999年出版

[4]《编译程序原理与技术》,李赣生等,清华大学出版社,1997年10月出版。

九、成绩考核方式及评分标准:

由指导教师结合实验报告质量及学习态度等采用5级记分制评分。实验成绩占期终综合测评成绩的30%。

十、实验开出率:100%

十一、实验项目与要求:

1

编译原理实验

实验一:词法分析

一、实验目的

给出PL/0文法规范,要求编写PL/0语言的词法分析程序。

二、实验准备

微机CPU主频1.3G以上,128M内存,安装好C语言,PASCAL语言,或C++。

三、实验时间

6学时

四、实验内容

已给PL/0语言文法,输出单词(关键字、专用符号以及其它标记)。

二.实验内容

1、格式

输入:源程序文件。输出:关键字、专用符号以及其它标记。

2、编译对象:

包含如下基本内容 1)变量说其它标记: 明语句 2)赋值语句 3)条件转移语句 4)表达式(算术表达式和逻辑表达式) 5)循环语句 6)过程调用语句

3、实现过程

本次实验所用的语言为标准C,以下同。本功能实现的主函数为getToken函数。通过从文件中读取字符到缓冲区中并由C语言字符的状态转换图流程判断返回一个字符(Token)。分析出来的Token主要分为关键字,专用符号,标记符号。

本实验实现的C语言的基本词法如下:

关键字: els if int return void while

专用符号: + - * / < >= == != = ; , ( ) [ ] { } /* */

其它标记: id num

ID = letter letter*

NUM = digit digit*

letter = a|b|...|z|A|B|...|Z|

ditit= 0|1|...|9

通过在C语言中定义一个枚举类型来识别这些符号:

PL/0语言的EBNF表示

<常量定义>::=<标识符>=<无符号整数>;

<标识符>::=<字母>={<字母>|<数字>};

<加法运算符>::=+|-

<乘法运算符>::=*|/

<关系运算符>::==|#|<|<=|>|>=

<字母>::=a|b|…|X|Y|Z

<数字>::=0|1|2|…|8|9

4、主体结构的说明

在这里说明部分告诉我们使用的LETTER,DIGIT, IDENT(标识符,通常定义为字母开头的字母数字串)和STR(字符串常量,通常定义为双引号括起来的一串字符)是什么意思.这部分也可以包含一些初始化代码.例如用#include来使用标准的头文件和前向说明(forward ,references).这些代码应该再标记"%{"和"%}"之间;规则部分&gt;可以包括任何你想用来分析的代码;我们这里包括了忽略所有注释中字符的功能,传送ID名称和字符串常量内容到主调函数和main函数的功能.

5、实现原理

程序中先判断这个句语句中每个单元为关键字、常数、运算符、界符,对与不同的单词符号给出不同编码形式的编码,用以区分之。

三:设计过程

2

编译原理实验

1.关键字:void,main,if,then,break,int,Char,float,include,for,while,printfscanf 并为小写。

2."+”;”-”;”*”;”/”;”:=“;”:”;”<“;”<=“;”>“;”>=“;”<>“;”=“;”(“;”)”;”;”;”#”为运算符。

3.其他标记如字符串,表示以字母开头的标识符。

4.空格符跳过。

5.各符号对应种别码

关键字分别对应1-13

运算符分别对应401-418,501-513。

字符串对应100

常量对应200

结束符#

四:举例说明

目标:实现对常量的判别

代码:

digit [0-9]

letter [A-Za-z]

other_char [!-@\[-~]

id ({letter}|[_])({letter}|{digit}|[_])*

string {({letter}|{digit}|{other_char})+}

int_num {digit}+

%%

[ |\t|\n]+ "auto"|"double"|"int"|"struct"|"break"|"else"|"long"|"switch"|"case"|"enum"|"re gister"|"typedef"|"char"|"extern"|"return"|"union"|"const"|"float"|"short"|"uns igned"|"continue"|"for"|"signed"|"void"|"default"|"goto"|"sizeof"|"do"|"if"|"st atic"|"while"|"main" {Upper(yytext,yyleng);printf("%s,NULL\n",yytext);} \"([!-~])*\" {printf("CONST_string,%s\n",yytext);}

-?{int_num}[.]{int_num}?([E][+|-]?{int_num})?

{printf("CONST_real,%s\n",yytext);}

"0x"?{int_num} {printf("CONST_int,%s\n",yytext);} ","|";"|"("|")"|"{"|"}"|"["|"]"|"->"|"."|"!"|"~"|"++"|"--"|"*"|"&"|"sizeof"|"/" |"%"|"+"|"-"|">"|"<"|">="|"<="|"=="|"!="|"&"|"^"|"|"|"&"|"||"|"+="|"-="|"*="|"/ ="|"%="|">>="|"<<="|"&="|"^="|"|="|"=" {printf("%s,NULL\n",yytext);} {id} {printf("ID,%s\n",yytext);}

{digit}({letter})+ {printf("error1:%s\n" …… 此处隐藏:2289字,全部文档内容请下载后查看。喜欢就下载吧 ……

编译原理_实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/110442.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)