收藏 分享(赏)

编译原理(词法分析器设计)1.doc

上传人:j35w19 文档编号:7376497 上传时间:2019-05-16 格式:DOC 页数:8 大小:111.56KB
下载 相关 举报
编译原理(词法分析器设计)1.doc_第1页
第1页 / 共8页
编译原理(词法分析器设计)1.doc_第2页
第2页 / 共8页
编译原理(词法分析器设计)1.doc_第3页
第3页 / 共8页
编译原理(词法分析器设计)1.doc_第4页
第4页 / 共8页
编译原理(词法分析器设计)1.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、武 汉 工 程 大 学计算机科学与工程学院编译原理实验报告1专业班级 实验时间 2010 年 11 月 12 日学生学号 实验地点 403学生姓名 指导教师实验项目 词法分析器设计实验类别 设计性 实验学时 4实验目的及要求实验目的:用 C 语言对一个简单语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。成 绩 评 定 表类 别 评 分 标 准 分值 得分 合 计上机表现 按时出勤、遵守纪律认真完成各项实验内容 30 分报告质量 程序代码规范、功能正确填写内容完整、体现收获 70 分说明:评阅教师: 日 期: 2010 年 月 日计算机科学与工程学院计

2、算机编译原理实验报告 2实 验 内 容实验要求:1.1 待分析的简单语言的词法(1 )关键字:Begin if then while do end(所有关键字都是小写)(2 )运算符和界符::= + - * / = = ; ( ) #(3)其他单词是标识符(ID )和整型常数( NUM) ,通过以下正规式定义:ID=letter(letter|digit)*NUM=digit digit *(4 )空格由空白、制表符和换行符组成。空格一般用来分隔 ID、NUM 、运算符、界符和关键字、词法分析阶段通常被忽略。1.2 各种单词符号对应的种别码单词符号 种别码 单词符号 种别码begin 1 :

3、17if 2 := 18then 3 21do 5 23letter(letter|digit)* 10 = 24digit digit* 11 = 25+ 13 ; 26- 14 ( 27* 15 ) 28/ 16 # 01.3 词法分析程序的功能输入:所给文法的源程序字符串。输出:二元组(syn,token 或 sum)构成的序列。其中:syn 为单词种别码;token 为存放的单词自身字符串;计算机科学与工程学院计算机编译原理实验报告 8sum 为整型常数。例如:对源程序begin x:=9; if x0 then x:=2*x+1/3; end #的源文件,经词法分析后输出如下序列:(

4、1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)1.4 词法分析程序的算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到的单词符号的第一个字符的种类,拼出相应的单词符号。1.主程序示意图主程序示意图如图 1-1 所示。其中初值包括如下两个方面:(1) 关键字表的初值关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:char *rwtab6=“begin”,”if”,”

5、then”,”while”,”do”,”end”;置初值调用扫描子程序输出单词二元组是结束输入串结束?否图 1-1 词法分析主程序示意图(2) 程序中需要用到的主要变量为 syn,token 和 sum。计算机科学与工程学院计算机编译原理实验报告 22.扫描子程序的算法思想首先设置 3 个变量:token 用来存放构成单词符号的字符串;sum 用来存放整型单词;syn 用来存放单词符号的种别码。扫描子程序主要部分流程如图 1-2 所示。报错Syn=10数字变量初始化忽略空格syn=11对不同符号给出相应的syn 值是返回否拼数是否文件结束?字母否是拼字符串是否关键字?syn 为对应关键字的单词

6、种别码返回其它符号图 1-2 词法分析程序流程词法分析程序的 C 语言程序#include “stdio.h“ /*定义 I/O 库所用的某些宏和变量*/#include “string.h“ /*定义字符串库函数*/#include “conio.h“ /*提供有关屏幕窗口操作函数*/#include “ctype.h“ /*分类函数*/char prog80=0,token8; /*存放构成单词符号的字符串*/char ch;int syn, /*存放单词字符的种别码*/计算机科学与工程学院计算机编译原理实验报告 2n,sum, /*存放整数型单词*/m,p; /*p 是缓冲区 prog

7、的指针,m 是 token 的指针*/char *rwtab6=“begin“,“if“,“then“,“while“,“do“,“end“;void scaner()m=0;sum=0;for(n=0;n)syn=21;tokenm+=ch;else if(ch=)syn=22;tokenm+=ch;elsesyn=20;ch=progp-;计算机科学与工程学院计算机编译原理实验报告 2break;case:m=0;tokenm+=ch;ch=progp+;if(ch=)syn=24;tokenm+=ch;elsesyn=23;ch=progp-;break;case:m=0;tokenm+

8、=ch;ch=progp+;if(ch=)syn=18;tokenm+=ch;elsesyn=17;ch=progp-;break;case+:syn=13;token0=ch;break;case-:syn=14;token0=ch;break;case*:syn=15;token0=ch;break;case/:syn=16;token0=ch;break;case=:syn=25;token0=ch;break;case;:syn=26;token0=ch;break;case(:syn=27;token0=ch;break;case):syn=28;token0=ch;break;ca

9、se#:syn=0;token0=ch;break;default:syn=-1;main()printf(“nnThe significance of the figures:n“1.figures 1 to 6 said Keywordn“2.figures 10 and 11 said Other indicatorsn“3.figures 13 to 28 said Operatorsn“);p=0;printf(“nplease input string:n“);do ch=getchar();progp+=ch;while(ch!=#);p=0;do计算机科学与工程学院计算机编译原

10、理实验报告 2scaner();switch(syn)case 11: printf(“(%d,%d)n“,syn,sum);break;case -1: printf(“n ERROR;n“);break;default: printf(“(%d,%s)n“,syn,token);while(syn!=0);getch();计算机科学与工程学院计算机编译原理实验报告 2图 1-3 词法分析执行效果实验总结曾经我以为学习编译原理是不需要编写代码的,但是经过第一堂课老师的介绍之后,我了解到,虽然本课程是编译原理,书本上讲到的都是一些理论知识,但是无论是哪一门课程都是需要有实践作为基础才能够将其学习的更好,本次实验是用 C 语言编写的,经过大二以及大三这一学期的学习,再重新运用 C 语言感觉还挺上手的,让我也可以重新复习一下 C 语言。我相信经过实践后的学习我可以将编译原理这门课程学习的更好。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报