编译原理课程设计报告pl0语言编译程序扩展

设计任务1 •给PL/O语言增加带else子句的条件语句和exit语句。exit语句作为while语句的非正常 出口语句。若处于多层while语句中,则它只作为最内层while语句的非正常出口。若它

1. 设计任务 1 PL/Oelseexitexitwhile •给语言增加带子句的条件语句和语句。语句作为语句的非正常出口 whilewhile 语句。若处于多层语句中,则它只作为最内层语句的非正常出口。若它没有处于任何 while 语句中,则是一个错误。(实现) 2PL/O •给语言增加实数类型。(思路,代码上暂未实现) 2. 设计思想和实现方法 PL/OPL/O 语言以赋值语句为基础,有顺序、条件和循环三种结构。有子程序概念,包括 PL/O 过程定义(可以嵌套)与调用且有局部变量说明。中唯一的数据类型是整型,可以用来说 PL/O 明该类型的常量和变量。同时,也具有算术运算和关系运算。 elsePL/Oifhenif-then-else 增加语句功能:语言只有・(结构,这里我们要增加形式的语 PL/Oif-then 言结构。在对语言进行分析时,每当遇到结构,就继续进行下一步判断,识別 thenelseifthen 语句结束后是否还有语句,最后根据条件的结果来处理程序的执行路径。故在 then 语句后加入相应代码进行相关判断。具体实现为在语句判断结束吋暂吋不进行跳转,然后 elseelse 通过关键字识别,若有存在则转入的处理函数进行处理,若不存在则正常跳转结束。 exitexitexit 增加语句功能:在这里我们要实现语句的出口功能。每当我们遇到时,由需 exitwhile 求可知首先判断是否处于循环中,也就是是否合法的问题。而题目屮要求还能实现 while 多层循环中仅执行最里层出口操作,我采用设置一个计数器的方式实现,每当进入一个 1,while1,0 循环中的时候计数器加每退出一个循环时计数器减这样通过检测计数器是否为就 exit 能判断语句的合法与否,且多层循环也能实现在最里层跳出而不影响外层循环。 type,realNo 增加实数类型(思路):首先增加一个枚举类型如然后设置两种枚举元素如和 integerN0PL0 来表示实数和整数类型。这里实数主要用来实现的是小数的加入,因为整数原本 type 语言就已经能够识别。然后在符号表中增加一个枚举类型的成员,增加之后再加入相应的 realsymnorw 符号类似于用來处理那个识别出來带小数的数字类型,同时扩大的宏定义至合理 main 值。然后再函数初始化中加入相应的保留字和保留字符号,按二分查找的规则进行添加, 以方便查找。最后在词法分析的时候,如果读入字符是一个数字的话,我们先假设是整数类 型,继续读取下一个字符,假如遇到'•',那么就设置为实数类型,并再次读入字符添加到原来 realNo 的字符串后边,所后进行相应的判断处理另外在语句处理中,当我们遇到类型要转换为 integerNointegerNorealNo 的时候,做出错误处理,转换为的时候我们默认做出转换不改变原先 值,只进行小数点添加和精确度扩大。 3. 程序说明 PL/0else 给增加带的子条件语句(主要代码) elseif(sym==ifsyiTi) getsym();condition(fsys|thensym|dosym); if(sym==thensym)then 〃遇到语句进入

腾讯文库编译原理课程设计报告pl0语言编译程序扩展