1、1/18 ForFor 循环语句的语法分析及语义分析程序设计循环语句的语法分析及语义分析程序设计 -递归下降法、输出四元式递归下降法、输出四元式 1.系统描述 11 目的 通过设计、编制、调试一个 FOR 循环语句的语法及语义分析程序,加深对语 法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。 12 设计内容及步骤 对循环语句的运行过程描述:FOR(赋值语句 1 或空;布尔表达式 2;循环 变量+步长) 赋值语句 ,for 中的三个部分都可以包含多于一个的式子,其 中第一部分为对循环变量赋初值;第二部分为判断循环条件是否满足,里面会用 到循环变量;第三部分为对每执行一次循
2、环就对循环变量做一次改变,并以此为 基础判断循环条件。该语句的执行顺序为,第一次执行该循环第一部分的语句, 在完成循环体部分的执行后,进入第三部分对循环变量做调整,然后到第二部分 判断循环条件是否满足情况,是则进入循环体,然后再按以上顺序循环做;否则 跳出循环。得到以下流程图: (1)写出递归下降语法分析方法要求的文法和属性文法描述。 (2)描述递归下降语法分析方法的思想。 (3)给出中间代码序列的结构设计。 2/18 (4)完成相应的词法分析、语法分析和语义分析程序设计。 (5)测试用例和测试结果。设计不同的测试用例以显示程序的各种功能,包括简 单的 for 循环和 for 循环的嵌套。并记
3、录测试结果。 2 翻译过程 2.1 词法分析 词法分析是计算机科学中将字符序列转换为单词(Token)序列的过程。进 行语法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称 Lexer) , 也叫扫描器 (Scanner) 。 词法分析器一般以函数的形式存在, 供语法分析器调用。 词法分析是编译过程中的第一个阶段,在语法分析前进行 。也可以和语法分析 结合在一起作为一遍, 由语法分析程序调用词法分析程序来获得当前单词供语法 分析使用。简化设计、改进编译效率、增加编译系统的可移植性。词法分析是编 制一个读单词的过程,从输入的源程序中,识别出各个具有独立意义的单词,即 基本
4、保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内 部编码及单词符号自身值。单词的分类主要分为五类: 1. 关键字: 由程序语言定义的具有固定意义的标识符。 也称为保留字或基本字。 2. 标识符:用来表示程序中各种名字的字符串。 3. 常 数:常数的类型一般有整型、实型、布尔型、文字型。 4. 运算符:如+、 、*、/ 等。 5. 界限符:如逗号、分号、括号等。 这里将词法分析程序设计成一个子程序, 每当语法分析程序需要一个单词时, 则调用该子程序。词法分析程序每调用一次,便从源程序文件中读入一些字符, 直到识别出一个单词。 2.2、语法分析 采用递归下降方法,为对应文法中的每
5、个非终结符编写一个递归过程,每个 过程的功能是识别由该非终结符推出的串。若输入串是给定文法的句子,则从文 法的开始符号出发一定能推导出与输入的单词串完全相同的句子。 语法分析是编译过程的一个逻辑阶段。 语法分析的任务是在的基础上将单词 序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等。语法分析 3/18 程序判断源程序在结构上是否正确.源程序的结构由上下文无关文法描述.语法 分析程序可以用 YACC 等工具自动生成。 语法分析是编译程序的核心部分,其主要任务是确定语法结构,检查语法错 误,报告错误的性质和位置,并进行适当的纠错工作。语法分析的主要工作:是 识别由词法分析给出的单词序
6、列是否是给定的正确句子(程序) 。语法分析常用 的方法:自顶向下的语法分析和自底向上的语法分析两大类。 此次设计中语法分 析中主要通过递归下降分析法对语法分析处理过程进行控制, 使输出的三地址表 示的翻译的工作有条不紊的进行,同时识别语法分析中的语法错误。 递归下降法主要采用自顶向下方法,即从文法的开始符号开始进行分析,逐 渐推导的往下构造语法树,使其树叶正好构造出所给定的源程序串。自顶向下方 法的关键是确定在推导过程中选择候选式的问题。当进行推导时, 一个非终结符 可能对应多个产生式,这样我们就无法事先知道应该用哪个产生式,因此实用都 作了一些限制。以便在任何情况下都能确定应该用的产生式。 自顶向下的主要思想是从开始符出发导出句型并一个符号一个符号地与给 定终结符串进行匹配。如果全部匹配成功,则表示开始符号可推导出给定的终结 符串。因此判定给定终结符号串是正确句子。 在语法分析的同时可由语法分析程序调用相应的语义子程序进行语义处理, 完成附加在所使用的产生式上的语义规则描述,并生成四元式的中间代码形式。 词法分析程序和语法分析程序的关系: 2.3 中间