当前位置:网站首页>编译原理——自上而下分析与递归下降分析构造(笔记)
编译原理——自上而下分析与递归下降分析构造(笔记)
2022-07-06 09:59:00 【yjx23332】
目的
构造不带回溯的自上而下分析程序
- 要消除文法的左递归性
- 克服回溯
主要思路
- 分析程序由一组递归过程组成, 对每一语法变量 ( 非终结符 ) 构造一个相应的子程序,识别对应的语法单位
- 通过子程序间的相互调用实现对输入串的识别
- 这样的分析程序称为递归下降分析器 ( 因为文法的定义
通常是递归的 )
过程与变量
ADVANCE:把输入串指示器 IP 指向下一个输入符号,即读入一个单字符号(调用词法分析器,取下一个符号)
SYM:IP 当前所指的输入符号(取得的符号)
ERROR :出错处理子程序
实例
每个非终结符有对应的子程序的定义,首先在分析过程中,当需要从某个非终结符出发进行展开 ( 推导 ) 时,就调用这个非终结符对应的子程序。
也即是,每个子程序对应一个非终结符(语法单位),遇到这个语法单位时,就掉用对应的子程序。
如,E就有一个子程序,负责E的识别、推导。该则程序负责调用T和E’。T等同理。
注意,文法必须是LL(1)文法才可以(动作唯一)。
模板
1
2
第一种写法,
ELSE IF检查的是,是否为终结符,是就结束,不是就是报错。
另外一种
两种都没有问题。
第二种,虽然没有检查follow集合,但下一个字符的会检查first集合。换言之,即是让后面的程序去检查当前的结果是否正确。
这样导致的是,程序报错位置的区别。
主程序就是开始符,是就开始。
巴科斯范式文法
在元符号“→”和“ |” 的基础上,扩充几个元语言符号
如
成图
参考文献
[1] 《程序设计语言编译原理》第三版 陈火旺
[2] 编译原理教程以及课件
边栏推荐
- RepPoints:可形变卷积的进阶
- 《ASP.NET Core 6框架揭秘》样章发布[200页/5章]
- Is it meaningful for 8-bit MCU to run RTOS?
- Appium automated test scroll and drag_ and_ Drop slides according to element position
- Why should Li Shufu personally take charge of building mobile phones?
- 分布式不来点网关都说不过去
- HMS Core 机器学习服务打造同传翻译新“声”态,AI让国际交流更顺畅
- 学 SQL 必须了解的 10 个高级概念
- Reppoints: advanced order of deformable convolution
- Zen integration nails, bugs, needs, etc. are reminded by nails
猜你喜欢
The solution that flutterweb browser cannot be rolled back after refreshing
Appium automated test scroll and drag_ and_ Drop slides according to element position
OpenCV中如何使用滚动条动态调整参数
EasyCVR电子地图中设备播放器loading样式的居中对齐优化
C# NanoFramework 点灯和按键 之 ESP32
Grafana 9 正式发布,更易用,更酷炫了!
基本磁盘与动态磁盘 RAID磁盘冗余阵列区分
Concept and basic knowledge of network layering
学 SQL 必须了解的 10 个高级概念
[translation] principle analysis of X Window Manager (I)
随机推荐
Unity tips - draw aiming Center
Xin'an Second Edition: Chapter 24 industrial control safety demand analysis and safety protection engineering learning notes
中移动、蚂蚁、顺丰、兴盛优选技术专家,带你了解架构稳定性保障
C语言通过指针交换两个数
How to output special symbols in shell
Unity particle special effects series - treasure chest of shining stars
Summary of Android interview questions of Dachang in 2022 (I) (including answers)
FlutterWeb瀏覽器刷新後無法回退的解决方案
Alibaba brand data bank: introduction to the most complete data bank
node の SQLite
RB157-ASEMI整流桥RB157
Pytorch extract middle layer features?
Manifest of SAP ui5 framework json
面试突击62:group by 有哪些注意事项?
Smart street lamp based on stm32+ Huawei cloud IOT design
The easycvr platform reports an error "ID cannot be empty" through the interface editing channel. What is the reason?
Reppoints: advanced order of deformable convolution
2022年大厂Android面试题汇总(二)(含答案)
【MySQL入门】第一话 · 初入“数据库”大陆
Pyspark operator processing spatial data full parsing (5): how to use spatial operation interface in pyspark