《编译原理与词法分析源代码》一书深入探讨了编译器设计的基础理论和实践技巧,特别关注于词法分析阶段的技术实现。书中不仅讲解了编译原理的核心概念,还提供了丰富的示例代码,帮助读者理解如何构建高效的词法分析器。对于计算机科学专业的学生及编程爱好者而言,本书是研究语言处理技术不可或缺的参考书。
实验一:词法分析程序
### 一、实验目的
通过设计并调试一个具体的词法分析程序来加深对词法分析原理的理解,并掌握如何在扫描程序设计语言的源代码过程中将其分解为各类单词的方法。实现功能是从输入的源程序中识别出各个具有独立意义的单词,包括基本保留字、标识符、常数(整型)、运算符和分隔符五大类,并依次输出每个单词的类型码及其自身值。(遇到错误时显示“Error”,跳过并继续处理)
### 二、实验要求
编写一个简单的词法分析程序,该程序需满足以下条件:
1. 能够识别如下几种语言中的简单词汇:
- 标识符:由字母开头后跟任意数量的字母或数字构成。
- 关键字(全部小写)包括main, int, float, double, char, if, then, else, switch, case, break, continue,while,do和for
- 整型常量:一个或多个连续的十进制数字组成
- 运算符 = + - * / < <= == != > >= 以及分隔符 ; ( ) ? :
2. 定义单词符号及其对应的类别码如下:
单词符号 | 类别码
---|---
int |1
= |17
float |2
< |20
if |3
<= |21
switch |4
== |22
while |5
do |6
标识符 |10
整型常量|11
; |26
+ |13
- |14
* |15
/ |16
( |27
) |28
? |29
: |30
3. 词法分析程序的功能:
输入:单词序列(以文件形式提供),输出识别的单词二元组到屏幕和结果文件。
输出格式为:(syn,token或sum) 其中 syn 是单词类型码, token 或 sum 存放的是实际的单词值。例如源代码“int ab;float ef=20;ab=10+ef;”对应的输出应是:
(保留字--1,int)(标识符--10,ab)(分号--26,;)
(保留字--2,float)(标识符--10,ef)(等号--17,=)(整数-11,20)(分号---26,)
(标识符---10,ab) (等号---17,)(整数---11,10)
(加号---- 13 ,)(标识符 --- 10 ,ef ) ( 分号 ---- 26)
4. 准备测试数据,将其保存在 TestData.txt 文件中。确保这些数据涵盖上述五种类型,并将结果与原输入进行对比输出并存储于 Result.txt 中。
5. 实验前编写好程序并在实验室调试;准备多组测试用例(存放于文件TestData.txt)。
### 三、实验内容
包括算法分析,程序流程图以及详细代码实现。