C语言小子集编译程序实习指南:词法语法语义解析

需积分: 9 3 下载量 55 浏览量 更新于2024-07-29 收藏 141KB DOC 举报
《编译原理上机实习指导书》是一份实用的教学材料,旨在帮助学生深入理解和实践编译原理。该实习的主要目标是通过构建一个编译器,让学生掌握词法分析、语法分析和语义分析的关键技术,同时锻炼他们的软件设计能力和动手能力。实习过程包括以下几个关键步骤: 1. 理解实习目标:实习的目标是设计并实现一个针对C语言小子集的编译器。通过这个项目,学生可以加深对编译原理基本概念的理解,如自顶向下方法,即递归子程序法,它适用于处理递归定义的语法结构。 2. 实习要求:学生需要选择一种编程语言(如C),并遵循一定的文法规则。具体而言,他们需要编写处理程序、常量说明、变量说明、语句等不同语法成分的子程序。例如,<程序>由<main>()函数和一组<分程序>组成,而<分程序>包括常量说明、变量说明和语句部分。 3. 实习步骤: - 阅读指导书,了解编译器的工作原理和步骤。 - 设计算法和程序框图,规划编译过程的逻辑。 - 编写源代码,实现词法分析器来识别C语言的词汇单元,如标识符、常量等。 - 进行语法分析,解析句子结构,例如通过递归调用处理<语句>、<项>、<因子>等。 - 实现语义分析,确保语法正确性的同时,检查变量类型、赋值规则等。 - 编写目标代码生成器,将解析后的语法结构转换为机器可执行的指令。 - 上机调试,解决可能出现的错误和优化编译过程。 - 最后,撰写实习报告,总结学习和实践经验。 4. 实习内容示例:实习的具体内容是实现一个C语言小子集编译器,比如指定的文法规则详细描述了各个语法元素及其构造。例如,<赋值语句>的形式为<标识符>=<表达式>,<条件语句>使用关系运算符比较两个表达式。 通过这次上机实习,学生们将不仅增强对编译原理理论的实践应用能力,还将学习到实际的软件开发流程和问题解决技巧,这对他们的职业发展具有重要意义。
2019-01-06 上传
一:词法分析: (1)程序中的主要函数: ①string file_name; //用来存储目标文件名 ②string GetText(); //提取文本文件中的信息 ③string GetWord(string str,int i,int& j); //获得一个单词符号,从位置i开始查找,并且有一个引用参数j,用来返回这个单词最后一个字符在str的位置 ④int DeleteNull(string str,int i); //这个函数用来除去字符串中连续的空格和换行;第一个参数为目标字符串,第二个参数为开始位置;返回值为连续的空格和换行后的第一个有效字符在字符串的位置 ⑤bool IsBoundary(string str,int i); //判断i当前所指的字符是否为一个分界符,是的话返回真,反之假 ⑥bool IsOperation(string str,int i); //判断i当前所指的字符是否为一个运算符,是的话返回真,反之假 ⑦void Print(vector<pair<int,string> > v); //此函数将一个pair数组输出 ⑧vector<pair<int,string> > analyst(vector<string> vec); //此函数接受一个字符串数组,对它进行词法分析,返回一个pair型数组 ⑨bool IsKey(string str); //此函数判断传递的参数是否为关键字,是的话,返回真,反之返回假 (2)简要分析词法分析程序的运行流程: ①符号表中1 到5: 1- 关键字 2-标志符 3-常数 4-运算符 5-界符 ②关键函数(此函数接受一个字符串数组,对它进行词法分析,返回一个pair型数组) vector<pair<int,string> > analyst(vector<string> vec) { vector<pair<int,string> > temp; 。。。。。。。