实验目的: 通过阅读和改造PL/0编译程序,熟悉PL/0编译程序的整体架构,识别出各语法单位对应的子程序;掌握递归下降语法分析程序的设计思想,加深对递归下降语法分析程序的理解。 通过设计编制调试具体的YACC程序,掌握YACC源程序的基本组成。 实验内容: 1. 对PL/0编译程序进行裁减和改造,使其仅包含词法和语法分析过程。该分析程序读入PL/0语言的源程序,实现以下功能: (1)对于输入中形如/*......*/这样的注释内容需要过滤掉。 (2)如果发现词法或语法错误,输出相应的错误信息。 (3)对于输入的算法表达式(式中可以包括标识符和常量),如果合法,则输出该表达式的值。 (4)对算术表达式中的常量类型进行扩充,除了原有的整型,还可以支持浮点类型(选做)。 (5)如果输入是一个合法的语法成分 输出:输入正确,没有词法或语法错误; 输出:该语法成分对应的语法分析树。语法分析树的显示格式可自行设计,建议采用缩进的文本表示形式。(选做) 提示: (1)阅读相应语法程序时参考其对应的EBNF描述,如教材第3版表4.3。 (2)PL/0编译程序(包括主程序)是由18个嵌套及并列的子函数组成的,其中与表4.3中的语法规则直接对应的8个子函数为:block( )、constdeclaration( )、vardeclaration( )、statement( )、condition( )、expression( )、term( )、factor( )。 2.借助自动生成工具LEX和YACC完成以下实验内容 阅读并运行所给程序:词法.l、语法.y,以理解LEX和YACC的使用和二者之间的通信机制。(分别编译后生成:词法.c、语法.c,将两个文件在VC下创建到一个project下运行即可) 下面是程序运行后的输入和输出结果示例,其中输入“cat eat mouse”后,输出“Sentence is valid”,表示可以识别此类语句,而输入“I love you”后,输出“syntax error”,表示不可识别这类语句。 修改源程序(词法.l、语法.y),使得修改后的程序能够识别类似下列语法结构的语句: I love you. I like apples and pears. I wish you success. We study compiler hard. We study compiler hard in school. 也可以自己定义更多符合英语语法规则的句子。
1
编译原理实验二 tiny扩充语法分析 mfc界面 扩充的语法规则有:实现 while、do while、for语句和求余计算式子,具体文法规则自行构造。 可参考:P97及P136的文法规则。 (1) While-stmt --> while exp do stmt-sequence endwhile (2) Dowhile-stmt-->do stmt-sequence while exp (3) for-stmt-->for identifier:=simple-exp to simple-exp do stmt-sequence enddo 步长递增1 (4) for-stmt-->for identifier:=simple-exp downto simple-exp do stmt-sequence enddo 步长递减1
2021-06-25 08:00:13 4.68MB tiny 扩充语法分析 编译原理 实验二
1
按照MiniC语言的语法规则检查词法分析输出的记号流是否符合这些规则,并根据这些规则所体现出的语言中的各种语法结构的层次性。把规则写入到JavaCC的 .jjt文件中,可以生成树状的层次结构。
2021-06-18 20:28:30 515KB 语法分析器 编译原理 西农大
1
编译原理实验二,语法分析 编译原理第二版,课后实验二
2021-06-14 12:39:14 325KB 语法分析 编译原理 实验
1
编译原理实验 语法制导把表达式翻译成逆波兰式
1
编译原理实验 词法扫描并生成中间表达式 淮海工学院
1
采用至少一种句法分析技术(LL(1)、SLR(1)、LR(1)或LALR(1))对类高级语言中的基本语句进行句法分析。阐述句法分析系统所要完成的功能。 在词法分析器的基础上设计实现类高级语言的语法分析器,基本功能如下:
2021-05-05 12:12:09 822KB 编译原理
1
含源代码、讲解视频、实验报告、程序设计思想等。 编写一个语法分析程序,对于给定的输入串,能够判断识别该串是否为给定文法的句型。输入一个LL(1)文法,构造相应的LL(1)预测分析表。2.从键盘读入输入串,由算法判断该输入串是否为该文法的句子,若正确,就通过,若错误就报错。
2021-04-29 01:46:00 24.81MB 编译原理 LL(1)语法分析器
合工大编译原理实验二语法分析李宏芒 一、实验目的 通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区 别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方 法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培 养适应社会多方面需要的能力。 二、功能描述 1. 可在界面文本框上手动输入或由文件读取方式导入.txt文件内需要分析的产生式文法。产生式文法及分析式都可任意。 2. 如果发现错误则报告出错ERROR。 3. 删除空格类字符,包括但不限于‘\t’, ‘\r’, ‘\n’, ‘ ’. 4. 可显示出分析过程、所有非终结符的first集合、follow集合和构造出的预测分析表;
2021-04-26 19:11:18 6KB LL1
1
参考C语言版本,用Java写的LL(1)分析总控程序,该语法分析程序实现LL(1)算法的分析过程。分析表是根据已知文法直接在程序中构造的。 本程序只能对由'i','+','*','(',')'构成的以'#'结束的字符串进行分析,会输出每一步的分析栈、剩余字符、所用产生式。 Eclipse做的,有运行结果截图。
2021-04-26 14:56:47 25KB 编译原理 LL1 语法分析 Java
1