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. 对表进行检查(检查表的错误,并且为 ...
 
随机推荐
- PP学习笔记02
			
SPRO SAP参考IMG MM03 物料视图 生产计划编制 需求管理 已计划的独立需求 需求类型 策略组 定义策略 策略组 主要策略(独立需求 ) 客户需求类型 需求类 (计划标识符.消耗标识.需求 ...
 - Mysql8 连接提示 Client does not support authentication protocol requested by server; consider upgrading MySQL client 解决方法
			
USE mysql;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';FLUSH PR ...
 - xml文件格式化后不能获取到值
			
在有些时候,我们要使用到xml文件,必须得将文件中的内容压缩成一行,才能读取到其中的值,一旦有换行符.制表符.空格之类的就读不到.所以只能在开发好以后,将代码压缩再执行,十分不方便. 尝试了几个替换符 ...
 - Ambiguous handler methods mapped for HTTP
			
前端访问的 controller 地址没有加方法名导致找不到. Servlet.service() for servlet [spring] in context with path [/ssmDem ...
 - 【HDU 5363】Key Set(和为偶数的子集个数)
			
题 Description soda has a set $S$ with $n$ integers $\{1, 2, \dots, n\}$. A set is called key set if ...
 - BZOJ5312 冒险(势能线段树)
			
BZOJ题目传送门 表示蒟蒻并不能一眼看出来这是个势能线段树. 不过仔细想想也并非难以理解,感性理解一下,在一个区间里又与又或,那么本来不相同的位也会渐渐相同,线段树每个叶子节点最多修改\(\log ...
 - linux保存住github的账号和密码
			
我是用 shell 命令来执行 git 操作的,所以就决定在 --global 配置一下用户名和密码,不用每次手动输入了. 设置步骤 1. 首先需要 ftp 连接到你的 Linux 服务器,在根目录( ...
 - 06 自学Aruba之win7系统802.1x认证网卡设置指导
			
点击返回:自学Aruba之路 06 自学Aruba之win7系统802.1x认证网卡设置指导 步骤1.在桌面任务栏找到“打开网络和共享中心”,点击进入: 步骤2.点击“管理无线网络”,进入无线网络配置 ...
 - 自学Linux Shell13.3-获得用户输入(read命令)
			
Bash shell提供了一些不同的方法来从用户处获得数据,包括以下3中方法: 命令行参数(添加在名利后面的数据) 命令行选项(可修改命令行为的单个字母)主要getopt.getopts命令 直接从键 ...
 - Java编程,打印昨天的当前时刻
			
public class Demo { /* * Java编程,打印昨天的当前时刻 */ public static void main(String[] args){ Calendar ca ...