"哈尔滨工业大学(深圳)《编译原理》实验报告-2020秋"
本实验报告主要关注的是词法分析,这是编译器设计中的一个关键步骤,其目的是将源代码文本分解成一系列有意义的单元,即单词项(tokens)。实验目标在于加深学生对词法分析方法的理解,并提高其实践技能。实验采用了C语言编程,并在macOS Mojave环境下使用CLion作为开发工具。
实验方法包括以下关键函数:
1. **主函数**:整个程序的入口点,协调其他功能模块的执行,如调用`process_string`函数对源程序进行处理。
2. **void process_string(char* buf)**:这个函数的主要任务是对输入的字符串`buf`进行词法分析。它会遍历字符串,调用其他辅助函数来识别不同的词法规则,如标识符、数字等。
3. **识别标识符的算法**:这部分涉及到如何区分和验证标识符。在C语言中,标识符由字母、数字或下划线组成,且不能以数字开头。实现时可能包含`isLetter`、`isDigit09`等函数,用于判断字符是否符合标识符规则。
4. **void install_id(char id[])**:此函数用于将识别出的标识符存储到符号表中。符号表是编译器中用于跟踪已识别单词项的关键数据结构。
5. **chargetChar(char* str)**:该函数用于从字符串`str`中获取当前指针位置的字符,帮助进行字符级的迭代和分析。
6. **isDigit09、isDigit19、isDigit07**:这些函数分别用于检查给定字符是否是0-9范围内的数字、1-9范围内的数字以及0-7范围内的数字,对识别不同类型的数字有所帮助。
7. **isDigit09Letteraf**:这个函数用于判断字符是否是0-9或a-f,对于识别十六进制数非常关键。
8. **isLetter**:检查字符是否为字母,对识别标识符和关键字有用。
9. **isPunctuation**:用于判断字符是否是标点符号,标点符号在源代码中有特殊的语法含义。
10. **isKey(char* str)**:此函数用于判断给定字符串`str`是否是预定义的关键字,如`if`, `else`, `for`等。
实验内容详细描述了不同类型的词法规则:
1. **标识符**:遵循特定的字母开头,后面可以是字母、数字或下划线的模式。
2. **十进制无符号整数**:由1-9之间的数字组成,可选地后跟零到多个0-9的数字。
3. **八进制无符号整数**:以0开头,后面跟着零到多个0-7的数字。
4. **十六进制无符号整数**:以0x开头,后跟零到多个0-9或a-f的字符。
实验通过实现这些规则和函数,帮助学生掌握词法分析的基本原理和方法,为后续的编译器前端设计打下坚实基础。