【编译原理三上机实验报告】主要涵盖了词法分析和语法分析两个核心概念,这是编译器设计的基础部分。词法分析是编译过程的第一步,它的目标是从源代码中识别出有意义的符号,即单词符号(tokens),并将它们转换成机器可以理解的形式。 在实验一中,词法分析的实现主要涉及以下几个知识点: 1. **词法分析的目的**:设计和调试词法分析程序,目的是为了深入理解词法分析的原理和作用。通过词法分析,可以将源代码分解成一系列独立的单词符号,为后续的语法分析打下基础。 2. **关键要素**: - **关键字**:实验中定义了特定的关键字,如`begin`, `if`, `then`, `while`, `do`, `end`,这些关键字在源代码中有特定的语义,需要被正确识别。 - **运算符和界符**:包括常见的算术运算符和逻辑比较符,如`=`, `+`, `-`, `*`, `/`, `<`, `<=`, `<>`, `>`, `>=`, `=`, `;`, `(`, `)`, `#`等。 - **标识符(ID)**:由字母和数字组成的字符序列,如变量名或函数名。 - **整型常数(SUM)**:由数字组成的序列,表示数值。 - **空格**:包括空格、制表符和换行符,虽然在词法分析阶段通常被忽略,但它们在源代码中起到分隔单词符号的作用。 3. **识别码的概念**:每个单词符号都有一个对应的种别码,用于区分不同的单词类型。例如,`begin`的种别码是1,`if`的种别码是2,等等。 4. **词法分析程序的功能**:输入是源程序字符串,输出是二元组序列,每个二元组包含单词种别码(syn)和单词自身字符串(token)或者整型常数(sum)。例如,对源代码的词法分析会产生如`(1,begin)`, `(10,x)`, `(18,:=)`, `(11,9)`, `(26,;)`, `(2,if)`等输出。 5. **词法分析算法思想**: - **关键字表**:预先定义关键字表,当扫描到的标识符与表中的关键字匹配时,就认为是关键字。 - **扫描子程序**:使用变量`token`存储单词字符串,`sum`存储整型常数,`syn`存储种别码。扫描过程中,根据第一个字符的类型判断单词符号。 6. **C语言实现**:给出了一个简单的词法分析器的C语言源代码。程序中包含输入字符串、扫描和输出结果的逻辑。例如,`scaner()`函数负责进行词法分析,`main()`函数接收用户输入并调用`scaner()`进行处理。 通过这个实验,学生能够理解和实践词法分析的过程,熟悉如何编写词法分析器,并能运用到实际的编程环境中,为编译器的进一步设计和实现打下坚实的基础。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- NodeJs安装教程(附node-v18.19.1-x64版本)
- TencentOS tiny Hazardous gas detector-结构体
- SSM-springSSM-spring
- nvm-cn-安装包nvm-cn-安装包
- hikyuu-c++hikyuu-c++
- FPGA-fpgaFPGA-fpga
- zorm-mysqlzorm-mysql
- java-leetcode题解之Maximum Nesting Depth of Two Valid Parentheses
- java-leetcode题解之Maximum Gap.java
- java-leetcode题解之Maximum Frequency Stack.java