本项目致力于开发一种解析机制,用于从编程语言源代码中精准提取词汇单元。涵盖关键字、标识符、数值与逻辑符号等核心元素的有效识别,确保代码分析的准确性与效率。
实验一:词法分析
### 一、实验目的
通过设计一个具体的词法分析程序来加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。具体来说,需要编制一个读单词过程,从输入的源程序中识别出各个具有独立意义的单词,包括基本保留字、标识符、常数、运算符和分隔符五大类,并依次输出各个单词的内部编码及它们自身的值。
### 二、实验预习提示
1. **词法分析器的功能与输出格式**
- 功能:输入源程序并识别出其中的所有单词。
- 输出格式:每个单词符号通常表示为一个二元组(即种别码,属性值)。本实验采用的是每类符号对应唯一一种别码的方式。
2. **BNF 表示法**
```plaintext
<标识符> -----> <字母><字母数字串>
<无符号整数>-----><数字><数字串>
+<加法运算符>
-<减法运算符>
```
以此类推。
3. **模块结构**
可根据课本P95-96页内容进行适当调整和理解后使用。
### 三、实验过程与指导
#### (一)准备
1. 阅读相关章节,明确语言的语法,并列出基本保留字、标识符、常数、运算符及分隔符。
2. 编制初步程序代码框架。
3. 准备多组测试数据。
#### (二)上机操作
按计划进行实验编程和调试工作。
#### (三)程序要求
1. 使用C++Builder, Delphi 或者VC等可视化工具编写,需具备用户界面(即Windows应用程序样式)。
2. 输入为某语言源代码。例如输入一段C语言代码:
```c++
main(){
int a,b;
a=10; b=a+20;
}
```
3. 程序应输出如下信息,并以文件形式保存结果(实际格式可能根据实际情况调整)。
输出示例:
- (2, main)
- (5, ()
- (5, ))
- ...
4. 识别保留字如if、int等,单词种别码设为1;其他标识符的代码为2。常数(无符号整型)的编码是3;运算符包括+、-、* 等,其种别码统一设置成4;分隔符如, ; ( ) { } 的编码分别为5。
#### (四)程序思路
1. 定义部分:定义所需常量和变量。
2. 初始化阶段:从文件读取源代码至字符缓冲区中。
3. 提取单词前的预处理步骤,包括去掉多余的空白符等操作。调用GETNB()过程实现上述功能;
4. 利用课本P97图示构造SCAN()函数来提取和识别构成单词的各种类型字符序列;
5. 调用LOOKUP()判断所得单词所属类别,并显示或导出结果。
以上是实验一词法分析的具体要求与步骤说明。