实验二递归下降语法分析.doc_第1页
实验二递归下降语法分析.doc_第2页
实验二递归下降语法分析.doc_第3页
实验二递归下降语法分析.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验二 递归下降语法分析一 实验目的1、 按照语言的语法要求编写文法的规则2、 转化文法的规则,使之具有EBCF,消除左递归和左因子3、 掌握编程形式的语法分析器的实现二 实验内容在TINY计算机语言的编译程序的词法分析部分实现的基础上,采用递归下降的方法实现语法分析,形成语法树。语法分析的输入是记号串,按照从左到右扫描,按照文法规则的要求,判断语句是否符合文法要求,如果符合要求则形成语法数,不符合则指出原因。为了简化程序的编写,对语法有具体如下的要求:(1) 只有5中语句if、repeat、read、write、assignment。(2) read只作用一个变量,实现输入。(3) write只作用一个表达式,实现输出。(4) 表达式只有两类:布尔表达式,只用于if和repeat语句的测试,算术表达式采用左结合和优先级的方式组成。(5) 没有变量的声明,仅仅在赋值时采用隐性的方式说明,只有整型变量;(6) 每个语句序列采用;的形式分开,最后一个语句没有分号(7) 没有函数或过程三 实验要求要求实现语法分析程序的以下功能:(1) 在实现之前首先实现EBNF,消除左递归和左因子,为递归下降程序做好准备(2) 对于语句和表达式采用枚举的形式定义,形成一个统一的树结点结构(3) 把正确源程序的首先经过词法分析形成二元式记号提供给语法分析程序(4) 如果出现错误,指出错误的位置和类型(5) 把语法树按照树的前序遍历的形式把所有的结点按照某种形式输出语法分析进行具体的要求:(1) 语法分析的具体功能实现是一个函数TreeNode* parse(),分析记号串,形成一个语法数。 (2) 编写一个单独的函数parseTree(TreeNode*)遍历整个语法树,把每个结点信息输出四.源代码#include using namespace std; char a80; / 字符串的存入char sym; / 单个的判断字符int i=0; / 字符串下标 void E(); / 功能识别函数void E2(); / 功能识别函数void T(); / 功能识别函数void T2(); / 功能识别函数void F(); / 功能识别函数void input(); / 输入函数void advance(); / 字符串小标进一函数 void main() while(1) input(); advance(); E(); / 从首个推导式E开始 if (sym=#) coutsuccessendl; else coutfailendl; i=0; / 重新输入时,下标置0 void E() T(); E2(); void E2() if(sym=+) adance(); T(); E2() else if (sym != ) & sym != #) couterror!endl; exit(0); void T() F(); T2(); void T2() if(sym=*) advance(); F(); T2(); else if(sym!=+&sym!=)&sym!=#) couterror!endl; exit(0); void F() if(sym=() advance(); E(); if(sym=) advance(); else couterror!endl; exit(0); else if(sym=i) advance(); e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论