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



文法:

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. 面象对象设计原则之二:开放封闭原则(Open-Closed Principle, OCP)

    开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则.开闭原则由Bertrand  Meyer于1988年提出,其定义如下: 开闭原则(Open-Closed Principle, ...

  2. CentOS 离线安装Gitlab-ce

    1. 上gtilab的官网,找了一下安装说明.. 首先安装 依赖的包 sudo yum install -y curl policycoreutils-python openssh-server cr ...

  3. hadoop集群故障排除

    故障一:某个datanode节点无法启动 我是以用户名centos安装和搭建了一个测试用的hadoop集群环境,也配置好了有关的权限,所有者.所属组都配成centos:centos [故障现象] 名称 ...

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

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

  5. Lodop打印设计(PRINT_DESIGN)里的快捷键

    Lodop打印控件,给开发人员提供了可视化编辑工具,编辑后可生成代码,然后复制到自己程序代码中,让开发更简单,打印设计中有一些快捷键也能让开发更便捷. 打印设计快捷键:ctrl 多个选中Shift 左 ...

  6. indicator function指示函数

    指示函数   在集合论中,指示函数是定义在某集合X上的函数,表示其中有哪些元素属于某一子集A. 中文名 指示函数 外文名 indicator function 相关学科 数学.组合数学 其他称呼 特征 ...

  7. jenkins--使用命令行自动启动Jenkins的job

    Jenkins作为持续集成强大的开源工具,除了使用界面它还有强大的cli命令. 1 自动启动jenkins 的job: 启动不带参数的job: curl --user USER:PASSWORD JE ...

  8. MT【71】数列裂项放缩题

    已知${a_n}$满足$a_1=1,a_{n+1}=(1+\frac{1}{n^2+n})a_n.$证明:当$n\in N^+$时, $(1)a_{n+1}>a_n.(2)\frac{2n}{n ...

  9. MT【66]寻找对称中心

    设函数$f(x)=2x-cosx,{a_n}$是公差为$\frac{\pi}{8}$的等差数列,$f(a_1)+f(a_2)+f(a_3)+f(a_4)+f(a_5)=5\pi$,则 $[f(a_3) ...

  10. LOJ #2718. 「NOI2018」归程(Dijkstra + Kruskal重构树 + 倍增)

    题意 给你一个无向图,其中每条边有两个值 \(l, a\) 代表一条边的长度和海拔. 其中有 \(q\) 次询问(强制在线),每次询问给你两个参数 \(v, p\) ,表示在 \(v\) 出发,能开车 ...