编译原理 词法分析器 流程代码解析
编译原理
实 验 报 告
课程名称 实验项目名称
学号 姓名
编译原理实验 词法分析器 XXXXXXXXXX XXX 计算机
科学与技术学院
班级 专业
XXXXXX 计算机 科学与技术 XXX
学生所在学院 指导教师
实验室名称地点
XXXXXX大学
计算机科学与技术学院
一、实验概述
1. 实验名称 【词法分析器】 2. 实验目的
! 理解编译器的工作原理; ! 掌握编译器的构造方法; ! 掌握词法分析器生成工具的用法; ! 加深对编译器词法分析阶段的理解。 3. 实验类型 【设计】 4. 实验内容
! 对给定的程序通过词法分析器能够识别一个个单词符号,并以二元式显示; ! 可以将要分析的程序保存到文件中进行读取; ! 删除无用的空白字符、回车符、及其它非实质性符号。
二、实验环境
! 实验使用的操作系统:Window XP ! 编程环境:Visual C++ 6.0
三、实验过程
1. 原理分析
词法分析器又称扫描器,词法分析程序的主要任务是从构成源程序的字符串
中识别出一个个具有独立意义的语法单位(单词)。词法分析程序的输入为字符串,而输出为提供给语法分析的单词串。为了能够从源程序文本中分离出这些单词,词法分析程序首先必须对源程序文本进行编辑,例如消除文本中的注释,空格,换行符以及其他一切对语法分析和代码生成均无关的信息。其次还需要区别单词究竟是标识符、数字、运算符或其他符号。最后还应该用文法的形式将它们表示出来,并存储在符号表中。词法分析器主要特点是不依靠语法,而只依靠词法,即处理一个单词时不依赖于外部单词的信息,因此词法分析器一般都很简单。当然,对某些语言在作词法分析时,在有些情况下不得不往前查看多个字符,有时还要做一些特殊处理,还有一些在词法分析中处理不了的,要留到语法分析中进行处理。
2. 设计思路
本算法主要利用状态转换图生成一个词法分析器,对输入的程序进行词法分析,并将分析得到的单词造表。其中关键字表和界限符表的大小是由高级语言的子集决定的,可以用数组装载;而标识符表和常数表的大小取决于输入的待分析程序中的变量、过程名、常数的个数,所以要用指针组成动态链表来装载。当然为了方便,我们也把它定义成数组处理。算法根据C语言单词符号类型不同,现将其分为关键字、普通标示符、常数和界符这四类,为简化程序判定复杂程度,现引入界符一词,所谓界符就是就是成对出现的符号,比如{ }、[ ]、" " 、' ' 等等。扫描字符串过程以遍历单词类型的形式循环进行,即在未识别出具有独立意
义的最小语法单位并且尚未判定所扫描的字符串无效,无法识别之前,将所扫描的字符串先统一集中存储在一个字符串数组之中,而后,每识别出一个单词,若这个单词的类型是关键字、普通标示符、常数或界符中之一,那么就将此单词以文字说明的形式输出。
3. 流程图:
4. 状态转换图:
5. 符号串分类表: 关键字(Keywords)
int char float double short long if else switch case default for while do void return continue break const goto volatile static
unsigned signed struct enum union auto register extern sizeof typedef asm bool explicit export friend inline mutable operator template typeid virtual warch_t delete namespace typename using const_castdynamic_cast reinterpret_cast static_cast class new public private protected this try throw catch (true false)
标识符(Identifiers) 1) 标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1, 2) 不能把C语言关键字作为标识符,例如if ,define ,for, while等.
3) 标识符长度是由机器上的编译系统决定的,一般的限制为8字符
(注:8字符长度限制是C89标准,C99标准已经扩
充长度,其实大部分工业标准都更长)。
4) 标识符对大小写敏感,即严格区分大小写。一般对变量名用小写,符号常量命名用大写。
5)标识符命名应做到“见名知意”,例如,length(表示长度),sum(表示求和),pi(表示圆周率)……
常数(Constans)
1)规定的数量与数字。 2)一定的重复规律。 3)一定之数或通常之数。 4)一定的次序。
5)常数是具有一定含义的名称,用于代替数字或字符串,其值从不改变。
运算符(Operators)
1)算术运算符:* - + /
2)关系运算符: > < == != >= <= 3)逻辑运算符:! && || 4)位运算符:<< >> ~ | ^ & 5)赋值运算符:=及扩展赋值运算符 6)条件运算符:?: 7)逗号运算符:, 8)指针运算符:*和& 9)求字节数运算符:sizeof
10)强制类型转换运算符:(类型) 11)分量运算符:. -> 12)下标运算符:[ ]
13)其他:如函数调用运算符:()
界符(Delimiters)
6. 实验代码及注释
#include<string.h> #include<stdio.h> #include<stdlib …… 此处隐藏:6755字,全部文档内容请下载后查看。喜欢就下载吧 ……
- 基于PLC控制的航空电镀生产线自动输送
- 中考预测课内外文言文对比阅读2
- 2018-2023年中国商业智能(BI)产业市场
- 中国金融体制改革研究2011new
- 外窗淋水试验方案
- 精益生产(Lean Production)
- 学校安全事故处置和信息报送制度
- Chapter 5 Human Resources Management
- 【小学数学】人教版小学六年级上册数学
- 初中数学解题方法与技巧
- 山东省创伤中心建设与管理指导原则(试
- 函数与数列的极限的强化练习题答案
- 10分钟淋巴按摩消脂
- 网络应急演练预案
- 服装设计入门基础知识
- 初二数学分式计算题练习
- (人教新课标)高二数学必修5第二章 数列
- 最新自主创业项目
- 北京大学 无机化学课件 4第4章 配合物
- 贸易公司业务管理制度




