当前位置:网站首页>编译原理——自上而下分析与递归下降分析构造(笔记)
编译原理——自上而下分析与递归下降分析构造(笔记)
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] 编译原理教程以及课件
边栏推荐
- 面试突击63:MySQL 中如何去重?
- Summary of study notes for 2022 soft exam information security engineer preparation
- The art of Engineering (1): try to package things that do not need to be exposed
- scratch疫情隔离和核酸检测模拟 电子学会图形化编程scratch等级考试三级真题和答案解析2022年6月
- Alertmanager sends the alarm email and specifies it as the Alibaba mailbox of the company
- The art of Engineering (2): the transformation from general type to specific type needs to be tested for legitimacy
- SQL statement optimization, order by desc speed optimization
- 历史上的今天:Google 之母出生;同一天诞生的两位图灵奖先驱
- It doesn't make sense without a distributed gateway
- 微信小程序中给event对象传递数据
猜你喜欢
EasyCVR接入设备开启音频后,视频无法正常播放是什么原因?
【Elastic】Elastic缺少xpack无法创建模板 unknown setting index.lifecycle.name index.lifecycle.rollover_alias
C语言通过指针交换两个数
It doesn't make sense without a distributed gateway
Pourquoi Li shufu a - t - il construit son téléphone portable?
FlutterWeb浏览器刷新后无法回退的解决方案
学 SQL 必须了解的 10 个高级概念
Reppoints: advanced order of deformable convolution
node の SQLite
C语言指针*p++、*(p++)、*++p、*(++p)、(*p)++、++(*p)对比实例
随机推荐
OpenCV中如何使用滚动条动态调整参数
[introduction to MySQL] the first sentence · first time in the "database" Mainland
C# NanoFramework 点灯和按键 之 ESP32
EasyCVR授权到期页面无法登录,该如何解决?
Flet教程之 13 ListView最常用的滚动控件 基础入门(教程含源码)
Xin'an Second Edition: Chapter 24 industrial control safety demand analysis and safety protection engineering learning notes
Grafana 9 is officially released, which is easier to use and more cool!
[getting started with MySQL] fourth, explore operators in MySQL with Kiko
Unity tips - draw aiming Center
FlutterWeb瀏覽器刷新後無法回退的解决方案
Why should Li Shufu personally take charge of building mobile phones?
The solution that flutterweb browser cannot be rolled back after refreshing
8位MCU跑RTOS有没有意义?
Pytest learning ----- pytest confitest of interface automation test Py file details
重磅!蚂蚁开源可信隐私计算框架“隐语”,主流技术灵活组装、开发者友好分层设计...
面试突击62:group by 有哪些注意事项?
Fleet tutorial 13 basic introduction to listview's most commonly used scroll controls (tutorial includes source code)
Debug and run the first xv6 program
Optimization of middle alignment of loading style of device player in easycvr electronic map
MySQL stored procedure