
编译原理实验报告之词法分析器部分
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
本实验报告详细记录了在《编译原理》课程中关于词法分析器的设计与实现过程。通过手工编写正则表达式定义语言的单词符号,并采用C++进行词法分析器的实际编码,成功实现了对源代码的有效扫描和分解,为后续语法分析阶段奠定了坚实的基础。
设计思想如下:
1. 程序主体结构:程序由三个主要部分组成——说明、规则以及辅助程序。
- 说明部分:这部分定义了LETTER, DIGIT, IDENT(标识符,通常指以字母开头的字母数字串)和STR(字符串常量,通常是双引号括起的一组字符)。此外还可以包含初始化代码,如使用标准头文件和前向声明等。
- 规则部分:这部分包括了任何分析时可能用到的代码。例如,在这里我们添加了忽略注释功能、传送标识符名称及字符串内容给主调函数的功能以及main函数的相关实现。
2. 实现原理:程序首先判断每个单元是关键字、常数、运算符还是分隔符,然后对不同的单词符号给出不同编码形式的代码以区分之。PL/0语言使用EBNF表示法定义如下:
- <常量定义> ::= <标识符>=<无符号整数>;
- <标识符> ::= <字母>{<字母>|<数字>}
- 关键字包括void, main, if, then, break等,且均为小写。
3. 设计过程:
1. 定义关键字:如 void、main 等,并全部使用小写字母表示;
2. 运算符定义:“+”;”-“;”*”;”/”;”:=”;”:“等,其编码形式为401至418及501至513;
3. 标识符和其他标记:以字母开头的标识符以及字符串常量;
4. 空格字符将被忽略。
各符号对应种别码如下:
- 关键字分别对应编码为1-13
- 运算符分别对应编码为401-418和501-513
- 字符串常量对应的编码是 100
- 常量的编码形式则是200。
4. 示例说明:
目标:实现对PL/0语言中常量的识别。代码示例包括了数字、标识符以及字符串的具体处理方法。
5. DFA(确定有限状态自动机)设计
6. 数据测试:用于验证程序正确性
7. 心得体会:匹配过程本身并不复杂,但需要一定的C++知识作为支撑;特别是在指针操作方面需掌握良好。
全部评论 (0)


