语法分析

实验目的:

编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。

实验要求:

利用C语言编制递归下降分析程序,并对简单语言进行语法分析。

1.带分析的简单语言的语法

用扩充的BNF表示如下:

(1)<程序>::=begin<语句串> end

(2)<语句串>::=<语句>{;<语句>}

(3)<语句>::=<赋值语句>

(4)<赋值语句>::=ID:=<表达式>

(5)<表达式>::=<项>{+<项>|-<项>}

(6)<项>::=<因子>{*<因子>|/<因子>}

(7)<因子>::=ID | NUM | {<表达式>}

2.实验要求说明

在本实验中,输入单词串,以“#”结束,如果输入的每一行都没有错误,则输出“Success”,如果某一行出错,打印出“第X行,XXX错误”,并且在分析完毕之后打印出总共输入的行数,以及错误的个数。

特别注意,要有对应的出错恢复处理功能,即判断某一行出错之后,要能跳过该错误,继续执行程序,而不是马上退出。

实验思想:

在实验中,采取每次读取一行单词串判断,出现第一个错误后报错,跳到下一行继续判断。

本实验采用的是从文本读取程序并且和分析结果一同显示在控制台上,在代码文件中放置了两个txt文档,一个是出错的程序(error_data.txt),一个是正确的程序(right_data.txt),通过在代码的main函数中设置读取的文件名,就可以读取到相关的文件了。

在error_data.txt中基本上囊括了所有错误,两个文件分别读取之后的结果如下:

读取error_data.txt,如下:

a:=4

do:=5;

b=7;

c:=a*((a+b)));

d:=(a+((a*(b+c))

#

预期结果:开始处:缺少‘begin’

第1行:缺少分隔符

第2行:变量名错误

第3行:赋值号错误

第4行:缺少左括号

第5行:缺少右括号

第6行:缺少‘end’

总共6行,其中有7个错误

读取right_data.txt,如下:

begin

a:=4;

e:=5;

b:=7;

c:=a*(a+b);

d:=(a+(a*(b+c)))

end#

预期结果:Success

总共7行,其中0个错误

以下附上该程序代码链接:https://download.csdn.net/download/just_a_new_life/10532688

编译原理 实验二 递归下降语法分析程序相关推荐

  1. 编译原理-实验二-LL(1)语法分析程序的设计

    一.实验目的 了解LL(1)分析器的基本构成及用自顶向下的LL(1)方法对表达式进行语法分析的方法,掌握LL(1)语法分析程序的构造方法. 二.实验内容 根据LL(1)语法分析算法的基本思想,设计一个 ...

  2. 编译原理-实验四-LR(0)语法分析程序的设计

    一.实验目的 了解LR(0)语法分析算法的基本思想,掌握LR(0)语法分析程序的构造方法. 二.实验内容 根据LR(0)语法分析算法的基本思想,设计一个对给定文法进行LR(0)语法分析的程序,并用C. ...

  3. 编译原理 - 实验三 - 递归下降语法分析器的调试及扩展

    一. 语法分析介绍 语法分析是编译过程的核心部分,它的主要任务是按照程序语言的语法规则,从由词法分析输出的源程序符号串中识别出各类语法成分,同时进行语法检查,为语义分析和代码生成做准备.执行语法分析任 ...

  4. 编译原理—实验二LL(1)语法分析(一)

    一.实验目的 1.熟悉LL(1)语法分析的基本原理,语法分析的过程,以及语法分析中要注意的一些问题. 2. 复习高级语言及线性表.栈.图等典型数据结构,进一步加强用高级语言来解决实际问题的能力. 二. ...

  5. 编译原理实验二:赋值语句的语法分析程序设计

    编译原理实验二:赋值语句的语法分析程序设计 1.1实验内容 目的: 在前面实验的基础上,通过设计.编制.调试一个典型的赋值语句的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查,进一步掌握 ...

  6. 编译原理实验二:Bison

    编译原理实验二:Bison 实验要求 1.了解Bision基础知识,如何将文法产生式转换为Bison语句 2.阅读/src/common/SyntaxTree.c,对应头文件 /include/Syn ...

  7. 编译原理实验二(全部存储到数组再逐行验证语法版.....这种思路被老师否了,应该是验证一行扔掉一行才对)

    编译原理实验二(可能还有BUG,不确定继续找) 要大改一次23333,老师的意思是不能用数组存储,而是一边识别单词,然后识别完一行就判断一次语法 写实验二的时候找到的实验一的一个逻辑错误 改动了实验一 ...

  8. 编译原理实验二 macos系统 itoa方法报错解决方法

    编译原理实验二 生成符号表的前期准备中使用itoa函数报错问题 执行 gcc -o parser lex.yy.c parser.tab.c ast.c 显示: itoa 函数是一个广泛应用的,从非标 ...

  9. 编译原理实验二 自上而下语法分析

    自上而下 语法分析实验 一.实验目的 (1)给出 PL/0 文法规范,要求编写 PL/0语言的语法分析程序. (2)通过设计.编制.调试一个典型的自上而下语法分析程序,实现对词法分析程序所提供的单词序 ...

  10. 实验2 递归下降语法分析程序设计

    [开发语言及实现平台或实验环境] C++/Clion [实验目的] (1)理解语法分析在编译程序中的作用,以及它与词法分析程序的关系 (2)加深对递归下降语法分析原理的理解 (3)掌握递归下降语法分析 ...

最新文章

  1. DataReader 连接数据库完整过程和代码(Sql Server)
  2. golang 字符串 去除最后一个字符
  3. LCCL网络:相互指导博弈来提升目标检测精度(附源代码)
  4. 产品经理需要去客服部门轮岗吗?
  5. windows 的mysql5.7安装
  6. Hi Azure. 从零开始打造一个语音机器人,跟你的电脑聊聊天。
  7. 基于visual Studio2013解决C语言竞赛题之1031猜数
  8. ui曲线谁是横坐标_【鼎阳硬件智库原创 | 测试测量】关于示波器的幅频特性曲线...
  9. 补充“为什么Scrum不行”
  10. Julia :where
  11. u盘安装linux6.5教程,u盘安装CentOS6.5
  12. 小程序开发者服务器设计,微信小程序的设计思路和理念
  13. Catia CAA二次开发视频教程+源代码+PDF教程
  14. java转Js原生,Java到JavaScript的转换
  15. b站《史上最全unity3D教程》笔记1-03
  16. Hadoop 安装snappy(编译源码)
  17. 线性代数 | 知识点总结(上)
  18. StarSpace系列之一:tagspace
  19. 数字图像处理MATLAB学习笔记(五)
  20. SQuirrel  一直连接不上问题

热门文章

  1. 提示缺少unicode打开乱码_教你如何破译乱码
  2. 记录峨眉山两日游(附带徒步登山攻略)
  3. AIMD response function的一般推导
  4. 逻辑谬误_新网络谬误
  5. SAN和NAS、ISCSI存储有什么区别,SAN和NAS设备哪个更好?
  6. 半监督学习:主动学习、纯半监督学习和直推学习区别和联系
  7. 主动学习,半监督学习,直推式学习
  8. iPad 升级失败后重新恢复出厂设置
  9. JS获取浏览器版本号
  10. 如何通过努力出书,如何写有畅销资质的书,本文汇集了多位计算机图书作者的经验...