东南大学计算机系编译实验:lex与yacc应用

4星 · 超过85%的资源 需积分: 10 23 下载量 193 浏览量 更新于2024-09-18 收藏 366KB DOC 举报
"东南大学计算机系编译实验 lex&&yacc" 这篇实验报告涉及的是编译原理中的两个重要工具——lex和yacc,它们分别用于处理编译过程中的词法分析和语法分析阶段。lex(也称为flex)是用于生成词法分析器的工具,它根据正则表达式定义不同的单词种类,而yacc(也称为bison)则用于生成语法解析器,基于上下文无关文法来解析程序结构。 实验一:词法分析 在词法分析中,主要任务是识别程序源代码中的不同单词类型,包括: 1. **标识符**:由字母(Letter)和数字(digit)组成,以字母开头。 2. **常量**:仅包含数字的序列。 3. **关键字**:预定义的保留词汇,如`auto`, `bool`, `break`, `case`, 等等,这些都是C++或C语言的关键字。 4. **运算符**:包括算术运算符(+、-、*、/)、比较运算符(<、>、=、!=、==、<=、>=)等。 5. **界符**:如分号(;)、花括号({、})、括号((、))等。 6. **空字符**:包括空格、制表符(\t)和换行符(\n)。 实验报告中还展示了DFA(确定有限状态自动机)的设计,这是词法分析器的基础,用于识别输入流中的单词种类。DFA通常由一系列状态和转移条件构成,能有效地匹配不同的单词模式。 实验过程中,输入通常是源代码文本,输出包括正常生成的词法分析结果(Txt输出)以及可能出现的错误信息。如果遇到未定义字符,将在txt文件和控制台同时显示错误信息。同样,如果找不到输入文件,控制台也会有相应的错误提示。 实验二延续了词法分析的主题,但似乎开始引入了简单的文法概念,给出了一段文法规则,这可能是为了演示如何用yacc进行语法分析。例如,文法0.S表示起始非终结符S可以扩展为E1.E,E可以扩展为E+T,以此类推,构建了一个简单的数学表达式解析规则。 总结来说,这个实验旨在让学生掌握使用lex和yacc工具进行编译器设计的基本步骤,包括创建词法分析器来识别程序中的基本元素,以及通过构造语法分析器来理解程序结构。这对于理解编译原理和实际编程语言的实现具有重要意义。