LL(1)文法分析表的构造和分析过程示例
在考完编译原理之后才弄懂,悲哀啊。不过懂了就好,知识吗,不能局限于考试。
E→TE'
E'→+TE'|ε
T→FT '
T'→*FT'|ε
F→id| (E)
一、首先判断是不是 LL(1)文法
--------------------------------------------------------------------------------------------------------
文法G的任意两个具有相同左部的产生式 A --> α|β 满足下列条件:
1、如果α和β不能同时推导出ε,则 FIRST(α)∩FIRST(β) = 空
2、 α和β 至多有一个能推导出 ε
3、如果 β --*--> ε ,则 FIRST(α)∩ FOLLOW(A)= 空
--------------------------------------------------------------------------------------------------------
对于 E'→+TE'|ε ,显然ε --> ε, First(+TE') = {+} ,Follow(E') = {{),#} 显然二者交集为空满足。
对于 F→id|(E) ,First(id) = {id} First((E)) = {(} 显然二者交集为空满足。
所以该文法是LL(1)文法。
二、计算出First集和Follow集
参考:http://www.cnblogs.com/standby/p/6792774.html
三、构建LL(1)分析表
输入:文法G
输出:分析表M
步骤:
1、对G中任意一个产生式 A --> α 执行第2步和第3步
2、for 任意a ∈ First(α),将 A --> α 填入M[A,a]
3、if ε ∈ First(α) then 任意a ∈ Follow(A),将 A --> α 填入M[A,a]
if ε ∈ First(α) & # ∈Follow(A), then 将 A --> α 填入M[A,#] (觉得这步没用)
4、将所有没有定义的M[A,b] 标上出错标志 (留空也可以)
--------------------------------------------------------------------------------------------------------
过程就不赘述了,结果:

四、分析过程
步骤:
1、如果 X = a = # 则分析成功并停机
2、如果 X = a != # 则弹出栈顶符号X, 并将输入指针移到下一个符号上
3、如果 X != a,查询分析表M[X,a] , 如果 M[X,a] = {X --> UVW},
则用UVW (U在栈顶) 替换栈顶符号 X。如果 M[X,a] = error或空,
则分析器调用错误处理程序。
(只有在第2种条件下才将输入指针移动!!!)
根据上表,对输入串 “id + id * id” 进行预测分析过程如下:
最开始在栈里压入 # 和 开始符号 E

LL(1)文法分析表的构造和分析过程示例的更多相关文章
- FIRST集合、FOLLOW集合、SELECT集合以及预测分析表地构造
FIRST集合.FOLLOW集合.SELECT集合以及预测分析表地构造 FIRST集合的简单理解就是推导出的字符串的开头终结符的集合. FOLLOW集合简单的理解就对于非终结符后面接的第一个终结符. ...
- 《编译原理》LR 分析法与构造 LR(1) 分析表的步骤 - 例题解析
<编译原理>LR 分析法与构造 LR(1) 分析表的步骤 - 例题解析 笔记 直接做题是有一些特定步骤,有技巧.但也必须先了解一些基本概念,本篇会通过例题形式解释概念,会容易理解和记忆,以 ...
- 编译原理根据项目集规范族构造LR(0)分析表
转载于https://blog.csdn.net/Johan_Joe_King/article/details/79058597?utm_medium=distribute.pc_relevant.n ...
- 语法设计——基于LL(1)文法的预测分析表法
实验二.语法设计--基于LL(1)文法的预测分析表法 一.实验目的 通过实验教学,加深学生对所学的关于编译的理论知识的理解,增强学生对所学知识的综合应用能力,并通过实践达到对所学的知识进行验证.通过对 ...
- LR(0)文法项目集规范族、DFA和分析表的构建实例
最近在复习编译原理,考试之前以为自己懂了,眼高手低就没去实践.结果一考试出问题了.... 学习就要脚踏实地,容不得半点模糊.凭着侥幸心理很危险的.以后要引以为戒啊. 特别写出这篇文章 :一来总结一下这 ...
- 《编译原理》构造 LL(1) 分析表的步骤 - 例题解析
<编译原理>构造 LL(1) 分析表的步骤 - 例题解析 易错点及扩展: 1.求每个产生式的 SELECT 集 2.注意区分是对谁 FIRST 集 FOLLOW 集 3.开始符号的 FOL ...
- 编译原理LL1文法分析表算法实现
import hjzgg.first.First; import hjzgg.follow.Follow; import hjzgg.tablenode.TableNode; import hjzgg ...
- Oracle表与索引的分析及索引重建
1.分析表与索引(analyze 不会重建索引) analyze table tablename compute statistics 等同于 analyze table tablename co ...
- MYSQL 分析表、检查表和优化表
1. 对表进行优化 ( 优化表主要作用是消除删除或者更新造成的空间浪费) 2. 对表进行分析(分析关键字的分布, 分析并存储MyISAM和BDB表中键的分布) 3. 对表进行检查(检查表的错误,并且为 ...
随机推荐
- router使用以及vue的动画效果
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- [转帖]速度快散热好 为什么U.2 SSD还没普及?
速度快散热好 为什么U.2 SSD还没普及? 经典的影视剧中总有那么几位武林高手,江湖上只闻其名,不见其形.今天我们要聊的这位爷,誓要拳打南山M.2,脚踩北海SATA 3!它就是固态硬盘界久负盛名 ...
- idea for mac 最全快捷键整理
一.Mac键盘符号和修饰键说明 ⌘ Command ⇧Shift ⌥ Option ⌃ Control ↩︎ Return/Enter ⌫ Delete ⌦ 向前删除键(Fn+Delete) ↑ 上箭 ...
- 一本通1548【例 2】A Simple Problem with Integers
1548:[例 2]A Simple Problem with Integers 题目描述 这是一道模板题. 给定数列 a[1],a[2],…,a[n],你需要依次进行 q 个操作,操作有两类: 1 ...
- windows编程按小时生成日志文件
这是一个简单的日志记录方法,为了避免单个日志文件过大,所以每个小时生成一个新的日志文件 注意:g_pLogPath 可以带路径,但是必须手动创建好路径,保证目录存在.而且要详细到log文件名,不能带后 ...
- MT【28】内心外衣下的等腰三角形个数
解答:30 评:这道题倒不是传统的与内心相关的向量题,传统的与内心或者内切圆有关的两个结论是aIA+bIB+cIC=0以及所谓的"人品公式"S=rp.这里主要是得到此三角形为以AC ...
- 【AtCoder010】A - Addition(奇偶)
AtCoder Grand Contest 010 A题 题目链接 题意 n个数,每次取两个奇偶性相同的数用他们的和代替他们,问最后能否只剩下一个数. 题解 因为奇偶相同的两个数之和一定是偶数,所以Y ...
- 删除linux下的指定文件
要求:删除linux下2天前的指定文件 find 文件问题:在 tmp 目录下有大量包含 picture_* 的临时文件,每天晚上 2:00 对一天前的文件进行清理.之前在 crontab 下跑如下脚 ...
- 自学Linux Shell9.2-基于Red Hat系统工具包存在两种方式之一:RPM包
点击返回 自学Linux命令行与Shell脚本之路 9.2-基于Red Hat系统工具包存在两种方式之一:RPM包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方 ...
- 【转】Linux常用命令
日常操作命令 查看当前所在的工作目录的全路径 pwd 12 [root@localhost ~]# pwd/root 查看当前系统的时间 date 12345678 [root@localhost ~ ...