当前位置:文档之家› 编译原理 结课论文

编译原理 结课论文

塔里木大学-信息工程学院
编译原理实验
编译原理结课论文
题目: 词法分析
作者: 电话: Email:
李健豪 15299585826
教师: 肖少拥 、 吴刚
递交日期: 2013 年 11 月 28 日
-1-
塔里木大学-信息工程学院
编译原理实验
目录
1.实验的目的与任务:............................................................................. 3 1.1 涉及知识点:................................................................................ 3 1.2 涉及技能点:................................................................................ 4
3.支持的语句及运算:
1) 数据类型:int,char void 2) 语句:赋值(=),if, while,for,begin,then 3) 数学运算:+,-,*,/ 4) 关系运算:=,!=,>,<,>= 5) 分隔符: : , ;{ } [ ] ( ) 6) 支持函数的定义、调用 7) 支持复合语句
-2-
塔里木大学-信息工程学院
编译原理实验
1.实验的目的与任务:
编译原理是计算机类专业特别是计算机软件专业的一门重要专业课。设置该课程的目的 在于系统地向学生讲述编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现 方法,使学生通过学习既掌握编译理论和方法方面的基本知识,也具有设计、实现、分析和 维护编译程序等方面的初步能力。编译原理是一门理论性和实践性都比较强的课程。进行上 机实验的目的是使学生通过完成上机实验题目加深对课堂教学内容的理解。同时培养学生实 际动手能力。
语法树
检索关塔里木大学-信息工程学院
编译原理实验
5.分析程序代码:
5.1 部分代码分析 #include<stdio.h> #include<stdlib.h> #include<string.h> #define _KEY_WORD_END "waiting fou your expanding"/*定义关键字的结束标志*/ typedef struct { int typenum; /*种别码*/ 种别码:表示单词的类别,提供给语法分析使用。一般用整数表示,比如标识符的种别
整体框架................................................................................................7 5.分析程序代码:..................................................................................... 8
2 题目分析
1.这里采用 C 语言编写的源程序作为词法分析程序的输入数据,输入数据和分析结果将 在文本框中显示。词法分析器的源代码使用 C++语言编写。
2. 下面就词法分析程序中的主要变量进行说明: 主函数 main():
打开要分析的 C 语言源程序,若不能正确打开,则报错。
-4-
塔里木大学-信息工程学院
定义一个单词缓冲区指针,这里解释一下数组指针和指针数组的区别:数组指针--指向数 组的指针,是一个指针,其指向的类型是数组;指针数组--元素为指针的数组,是一个数 组,其中的元素为指针。
-8-
塔里木大学-信息工程学院
编译原理实验
char ch; char *rwtab[]={"begin","if","then","while","do","end","int","return","char",_KEY_WOR D_END}; WORD *scaner(); /*词法扫描函数,获得一个单词*/ 词法扫描函数,根据建立的语法树和符号表筛选单词
词法分析的目的是将输入的源程序进行划分,给出基本符号的序列,并掠过注解和空格 等分隔符号。基本符号是与输入的语言定义的词法所规定的终结符。
语法分析是编译过程的核心部分。 语法分析的基本任务是在词法分析识别出单词符号串的基础上,分析判断程序的语法结 构是否符合语法规则。
语言的语法结构用上下文无关文法来描述,因此,语法分析器的任务本质上是按上下 文无关文法的产生式,确定整个单词串是否构成语法上正确的程序。
语法分析的方法通常分为两类: 自上而下分析法和自下而上分析法 这次是编制一个读标识符过程,从输入的源程序中,识别出各个具有独立意义的,即标 识符基本保留字母、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编 码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续进行) 1.1 涉及知识点: 词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token) 序列的过程。进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称 Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。 词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一 个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单 词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用 Lex 等工具 自动生成。词法分析器(词法分析程序):从源代码中读取输入字符,产生单词序列(生成独 立的有意义的逻辑单元称作单词(token)),提交给语法分析使用。 任务:逐个读入源程序字符并按照构词规则切分成一系列单词。单词是语言中具有独立 意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。
码为 1,常数为 2,保留字为 3,运算符为 4,界符为 5。
char *word;
}WORD;
char input[255];
/*源程序缓字符冲区*/
创建一个数组用来记录源程序缓字符冲区,数组中包含的个数为 256。
char token[255]="";
/*单词缓冲区*/
创建一个数组用来记录单词缓冲区,数组中包含的个数为 256。
2 题目分析...................................................................................................4 3.支持的语句及运算:............................................................................. 5 4.基本树形结构:..................................................................................... 6
编译原理实验
1、数字检测,对照符号表输出,若匹配成功,则返回序号; 2、字符串检测, 对照符号表输出,若匹配成功,则返回序号; 3、基本保留字检测,对照符号表输出,若匹配成功,则返回序号; 4、运算符检测,对照符号表输出,若匹配成功,则返回序号; 5、分隔符(界符)检测,对照符号表输出,若匹配成功,则返回序号; 6、排错处理; 结束。 3.以下给定一个 C 语言的符号表的设计和结构:
5.1 部分代码分析................................................................................ 8 5.2 功能实现:.................................................................................. 10 6 程序测试.................................................................................................12 7.思考总结................................................................................................13 8.参考文献................................................................................................13 9.学习编译原理后的感想....................................................................... 14
void main() {
int over=1; int count=0; WORD *oneword = new WORD; printf("**********请输入,以#号结束*************:\n"); scanf("%[^#]s",input); /*输入源程序字符串到缓冲区,以#结束*/ p_input=0; printf("词法分析结果是:\n\n"); while (over<1000 && over!= -1) {
-5-
塔里木大学-信息工程学院
4.基本树形结构:
if 语句:
if 语句
编译原理实验
表达式
语句
语句
相关主题