在考完编译原理之后才弄懂,悲哀啊。不过懂了就好,知识吗,不能局限于考试。



文法:

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)文法分析表的构造和分析过程示例的更多相关文章

  1. FIRST集合、FOLLOW集合、SELECT集合以及预测分析表地构造

    FIRST集合.FOLLOW集合.SELECT集合以及预测分析表地构造 FIRST集合的简单理解就是推导出的字符串的开头终结符的集合. FOLLOW集合简单的理解就对于非终结符后面接的第一个终结符. ...

  2. 《编译原理》LR 分析法与构造 LR(1) 分析表的步骤 - 例题解析

    <编译原理>LR 分析法与构造 LR(1) 分析表的步骤 - 例题解析 笔记 直接做题是有一些特定步骤,有技巧.但也必须先了解一些基本概念,本篇会通过例题形式解释概念,会容易理解和记忆,以 ...

  3. 编译原理根据项目集规范族构造LR(0)分析表

    转载于https://blog.csdn.net/Johan_Joe_King/article/details/79058597?utm_medium=distribute.pc_relevant.n ...

  4. 语法设计——基于LL(1)文法的预测分析表法

    实验二.语法设计--基于LL(1)文法的预测分析表法 一.实验目的 通过实验教学,加深学生对所学的关于编译的理论知识的理解,增强学生对所学知识的综合应用能力,并通过实践达到对所学的知识进行验证.通过对 ...

  5. LR(0)文法项目集规范族、DFA和分析表的构建实例

    最近在复习编译原理,考试之前以为自己懂了,眼高手低就没去实践.结果一考试出问题了.... 学习就要脚踏实地,容不得半点模糊.凭着侥幸心理很危险的.以后要引以为戒啊. 特别写出这篇文章 :一来总结一下这 ...

  6. 《编译原理》构造 LL(1) 分析表的步骤 - 例题解析

    <编译原理>构造 LL(1) 分析表的步骤 - 例题解析 易错点及扩展: 1.求每个产生式的 SELECT 集 2.注意区分是对谁 FIRST 集 FOLLOW 集 3.开始符号的 FOL ...

  7. 编译原理LL1文法分析表算法实现

    import hjzgg.first.First; import hjzgg.follow.Follow; import hjzgg.tablenode.TableNode; import hjzgg ...

  8. Oracle表与索引的分析及索引重建

    1.分析表与索引(analyze 不会重建索引)   analyze table tablename compute statistics 等同于 analyze table tablename co ...

  9. MYSQL 分析表、检查表和优化表

    1. 对表进行优化 ( 优化表主要作用是消除删除或者更新造成的空间浪费) 2. 对表进行分析(分析关键字的分布, 分析并存储MyISAM和BDB表中键的分布) 3. 对表进行检查(检查表的错误,并且为 ...

随机推荐

  1. router使用以及vue的动画效果

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  2. [转帖]速度快散热好 为什么U.2 SSD还没普及?

    速度快散热好 为什么U.2 SSD还没普及?   经典的影视剧中总有那么几位武林高手,江湖上只闻其名,不见其形.今天我们要聊的这位爷,誓要拳打南山M.2,脚踩北海SATA 3!它就是固态硬盘界久负盛名 ...

  3. idea for mac 最全快捷键整理

    一.Mac键盘符号和修饰键说明 ⌘ Command ⇧Shift ⌥ Option ⌃ Control ↩︎ Return/Enter ⌫ Delete ⌦ 向前删除键(Fn+Delete) ↑ 上箭 ...

  4. 一本通1548【例 2】A Simple Problem with Integers

    1548:[例 2]A Simple Problem with Integers 题目描述 这是一道模板题. 给定数列 a[1],a[2],…,a[n],你需要依次进行 q 个操作,操作有两类: 1 ...

  5. windows编程按小时生成日志文件

    这是一个简单的日志记录方法,为了避免单个日志文件过大,所以每个小时生成一个新的日志文件 注意:g_pLogPath 可以带路径,但是必须手动创建好路径,保证目录存在.而且要详细到log文件名,不能带后 ...

  6. MT【28】内心外衣下的等腰三角形个数

    解答:30 评:这道题倒不是传统的与内心相关的向量题,传统的与内心或者内切圆有关的两个结论是aIA+bIB+cIC=0以及所谓的"人品公式"S=rp.这里主要是得到此三角形为以AC ...

  7. 【AtCoder010】A - Addition(奇偶)

    AtCoder Grand Contest 010 A题 题目链接 题意 n个数,每次取两个奇偶性相同的数用他们的和代替他们,问最后能否只剩下一个数. 题解 因为奇偶相同的两个数之和一定是偶数,所以Y ...

  8. 删除linux下的指定文件

    要求:删除linux下2天前的指定文件 find 文件问题:在 tmp 目录下有大量包含 picture_* 的临时文件,每天晚上 2:00 对一天前的文件进行清理.之前在 crontab 下跑如下脚 ...

  9. 自学Linux Shell9.2-基于Red Hat系统工具包存在两种方式之一:RPM包

    点击返回 自学Linux命令行与Shell脚本之路 9.2-基于Red Hat系统工具包存在两种方式之一:RPM包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方 ...

  10. 【转】Linux常用命令

    日常操作命令 查看当前所在的工作目录的全路径 pwd 12 [root@localhost ~]# pwd/root 查看当前系统的时间 date 12345678 [root@localhost ~ ...