LL(1)文法分析表的构造和分析过程示例

编译原理——第四章-LL(1)文法的判别条件、构造文法的预测分析表 LL(1)文法的判别条件 若一个文法满足以下条件,则称该文法G为LL(1)文法: 阅读详情

 LL(1)文法分析表的构造和分析过程示例

转自:https://www.cnblogs.com/standby/p/6792814.html


文法:

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

编译原理题练习题测试题 1、编译程序分为哪几个逻辑阶段,各阶段的主要功能是什么? 2、考虑文法 S(L) | a LL, S | S (1)给出(a,(a, a))的最右推导。 (2)给出(a,(a, a))的语法分析树。 (3)该文法描述的是什么语言? 3、(20分)下面的文法描述命题演算公式 S S and S | S or S | not S | p | q |(S) (1)它是二义的吗? (2)如果是二义的,用某个句型的两个不同的最左推导来说明。 (3)如果是二义的,将其改为无二义的,其优先级从高到低依次是not, and 阅读详情

相关推荐

LL(1)分析过程

【问题描述】  设计一个给定LL(1)分析表,输入一个句子,能由依据LL(1)分析表输出与句子对应的语法树。能对语法树生成过程进行模拟。(算法参见教材)【基本要求】  动态模拟算法的基本功能是:(1)       输入LL(1)分析表和一个句子;(2)       输出LL(1)总控程序;(3)       输出依据句子构成的对应语法树的过程;  【测试数据】

zwillback的专栏 2157

编译原理:LL(1)文法-构造预测分析表

LL(1)文法-构造预测分析表 复习笔记 LL(1)文法分析是语法分析中比较重要的一个方法,其中比较重要的环节是构造预测分析表。 当然,在构造预测分析表之前,需要掌握两个集合的求法:FIRST集合和FOLLOW集合。 注意:下文的测试用例中使用的文法如下: E→TE’ E’→+TE’|ε T→FT’ T’→*FT’|ε F→(E)|i FIRST集合的求法 方法步骤如下: 1、X∈VT (终结符号集合) FIRST(X)={X}(即:终结符号的FIRST集仍然是其本身)。 2、X∈VN(非终结符号集合)

jianbai_的博客 4万+

编译原理-LL1文法实现

编译原理的ll1文法的python实现

qq_43370683的博客 1956

【编译原理】LL1分析表的构造

首先要构造FIRST集合和FOLLOW集合 例题 首先构造比较简单的FIRST集合 上面两个的FIRST集合非常好计算 直接提取候选式最开始的终结符即可 答案 接着构造它的FIRST集合 我们去找F的fist集合 由于F的fist集合里面没有空字,所以我们不去看 T’ 的 fist集合 而将F的first认为是T的first集合 同理 T的集合也没有空字,故T的first集合就是E的first集合 接着构造FOLLOW集合 我们首先在文法开始符号E加入# 注意FOLLOW集合里面没有空字

g14365893的博客 1万+

自定向下预测分析法(LL(1)非递归)

自定向下预测分析法(LL(1)非递归) 通过之前得学习,可以知道,使用自顶向下得预测分析法,选择产生式时没必要进行回溯,每一步推导仅有一个产生式符合要求,否则就出错。 怎么知道选哪个产生式呢?在进行推导之前,要有一个预测分析表,根据当前扫描到得终结符号和当前正在推导的非终结符,得到选用哪一条产生式。(是一个二维的表格)关于怎么生成预测分析表,前面的博客有提到过。 使用非递归的方法: - 当前...

qq2071114140的博客 1354

表达式语法分析——预测分析法 SDUT 编译原理实验

表达式语法分析——预测分析法 Description 预测分析法是自顶向下分析的一种方法,一个预测分析程序是由三个部分组成: (1)预测分析程序 (2)先进后出栈 (3)预测分析表 现给出表达式文法: E→TG G→+TG |ε T→FS S→*FS |ε F→(E) | i 该表达式文法是LL(1)文法,其预测分析表为: 请根据该预测分析表构造预测分析程序,完成对表达式的语法分析,对给定的输入串,判断其是否为合法表达式,给出所使用的产生式序列。 I...

Move on 931

编译原理LL1文法

//判空已经是完美的,follow集也已经设标志位方法,是我最完美的LL1文法!#include //#include #include #include#include#include#includeusing namespace std;const int MaxVnNum = 10;const int MaxVtNum = 10;const int MaxPLength = 20;const

xiyuexiyue的专栏 5237

什么是LL(1)、LR(0)、LR(1)文法、LR分析表—编译原理

SLR(1)、LR(1)、LALR(1)文法之间的关系,什么是LL(1)、LR(0)、LR(1)文法,什么是句柄、什么是自上而下、自下而上分析,何时需要消除左递归,如何消除左递归,如何判断二义文法及消除文法二义性,什么是上下文无关文法、最左推导和最右推导

我们都是被分成两半的人,一边热爱生活,一边憎恨生活。面对生活,我们总是在矛盾的两端摇摆,在反复的矛盾和犹豫中,一边踉跄前行,一边重振旗鼓。我渴望改变,渴望变得更好,渴望找到出口……就像一个溺水人的挣扎,就像一个救生圈。我是一个矛盾集合体,想要变得快乐,但是 1万+

预测分析法

设计要求:对于任意输入的一个LL(1)文法,构造其预测分析表,并对指定输入串分析其是否为该文法的句子。 思路:首先实现集合FIRST(X)构造算法和集合FOLLOW(A)构造算法,再根据FIRST和FOLLOW集合构造出预测分析表,并对指定的句子打印出分析栈的分析过程,判断是否为该文法的句子。 (1)求FIRST集的算法思想 如果产生式右部第一个字符为终结符,则将其计入左部first集 ...

清风徐来的博客 2017

分位数映射数据后处理-Quantile Mapping后处理 (R语言)

统计后处理器基本上是统计模型,将观察到的关注变量与从气象或水文模型的直接模型输出(DMO)导出的适当预测变量相关联。统计后处理的重要性早已在气象预报中得到认可。早期的工作包括完善的预测(perfect prognosis),模型输出统计(MOS)和模拟方法(analog method)等模型。 近年来,已经提出了许多其他后处理方法,包括秩直方图校准(rank histogram calibrati...

水滴石穿,绳锯木断 1万+

ANSYS接触分析实战:从法兰连接案例看接触刚度与穿透容差的黄金搭配

本文以法兰连接为实战案例,深入解析了ANSYS接触分析中接触刚度(FKN)与穿透容差(FTOLN)的参数设置策略。通过系统性敏感性分析,揭示了这对关键参数的博弈关系与调优逻辑,旨在帮助工程师在保证计算收敛的同时,获得高精度的有限元分析结果,有效解决工程中的非线性接触难题。

moon9的博客 314

基于LL(1)分析法的语法分析器Python实现

# -*- coding: utf-8 -*- # @File : LL(1).py # @Author: Judong Li # @Date : 2020/05/29 # @Desc : 编译原理——LL1语法分析器 import csv class Stack(object): """栈""" def __init__(self): self.items = [] def is_empty(self): """判断是否为空"""

qq_40903982的博客 1919

【GPIO模拟串口通信协议】

由于这段时间搞了个安卓相关的项目,需要和安卓进行Uart通信。但是选用的芯片并没有自带uart功能,所以在充分评估项目后,考虑波特率不高的情况下,决定使用GPIO去模拟串口通信协议了。

学海无涯苦作舟 2638

LL(1)语法分析设计原理与实现——以赋值语句为例

LL1文法分析程序的设计与实现,内附代码。

m0_60405761的博客 2913

vins-fusion环境配置、安装与测试

本文主要介绍如何搭建vins-fusion的运行环境,以及解决vins-fusion编译运行时遇到的环境冲突问题,并在此基础上实现例程的运行。

qq_52068373的博客 1万+

使用 Python 和可视化编程控制树莓派机械臂myCobot

这些模块包括逻辑、循环、数学、文本、列表、颜色、变量、函数以及控制机械臂的函数等等,所以用户可以轻松入门编程,只需单击右上角的运行就可以启动程序,做一些有趣的应用。可以搭配任意摄像头进行图像识别,具有4个 USB 端口,可以通过 Raspberry Pi 的微型 HDMI 端口连接到显示器. 最后,40 个GPIO 接头可以进行更多扩展应用,机械臂每个接口都有清晰的标记,面板上还有一个电源开关和一个直流电源插孔。您现在可以将机器人放在地板或桌子上,并用力拧紧吸盘,以确保机械臂的底座在操作过程中不会移动。

m0_62456998的博客 3966

Java实现LL1语法分析器【编译原理】

Java实现LL1语法分析器【编译原理】

小心星的博客 3845

PLL锁相环性能上不去?可能是电荷泵的电流失配在捣鬼(附Jae-Shin Lee经典方案解析)

本文深入分析了PLL锁相环性能瓶颈的根源——电荷泵电流失配问题,详细解析了Current Mismatch和Current Deviation的区别及其对系统的影响。重点介绍了Jae-Shin Lee的多级电流镜技术,该方案通过运放构建虚拟短路和四级电流镜结构,显著降低了电流失配,使参考杂散改善15dB以上。文章还提供了从仿真到流片的完整优化流程,帮助工程师系统解决电荷泵性能问题。

weixin_30684743的博客 371

编译原理(九)——递归下降法

背景: 自定向下的语法分析方法,LL(1)是一种非常直观的方法,它的分析过程是按照句子的定义来进行的,也就是说从开始符出发对要分析的串进行推导,如果推导成功就证明这个被分析的串是一个合法的句子,否则的话就有语法错误,但是在推导过程中,对文法进行了一些限定,保证推导过程是唯一的 。 总体上说,LL(1)就是在选择规则的时候加入了约束条件,考虑到输入流中的第一个符号,以及推导过程中的非终极符的规则选择,只有当头符属于当前Vn为左部的某条规则的Predict 集的时候,才使用该规则进行推导,否则即错。对规则的.

很注重数学和408 1万+

【基于51】红外寻迹智能小车 - 代码篇

这是一个基于C51单片机的红外巡线智能小车,是一个适合嵌入式单片机、C语言初学者练习的小Demo,文章提供完整的项目思路、免费的源代码。

ZER00000001的博客 3万+

基于STM32L4XX、HAL库的IP101GRI以太网收发器(PHY)驱动程序设计

define IP101GRI_PHY_ADDRESS 0x01 // 根据硬件设计设置PHY地址。#define IP101GRI_PHYSTS 0x10 // PHY状态寄存器。#define IP101GRI_PHYINIR 0x12 // PHY中断寄存器。#define IP101GRI_PHYCR 0x14 // PHY控制寄存器。#define IP101GRI_PHYID2 0x03 // PHY标识符2。

zhusl6688的博客 722

语法分析实验ll算法c语言,实验5 ll语法分析程序的设计与实现(c语言).pdf

班级: 学号: 姓名:实验五 LL(1)文法识别程序设计一、实验目的通过 LL(1)文法识别程序的设计理解自顶向下的语法分析思想。二、实验重难点FIRST 集合、FOLLOW 集合、SELECT 集合元素的求解,预测分析表的构造。三、实验内容与要求实验内容:1.阅读并理解实验案例中LL(1)文法判别的程序实现;...

weixin_30941657的博客 254

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ll(1)文法自动生成语法分析程序的设计_编译工程6:语法分析(4)

接下来我们讨论自底向上的语法分析。自底向上的语法分析过程同样对应于为一个输入串构造语法分析树的过程,只不过是从叶子节点(底部)逐渐向上到达根节点(顶部)。自底向上分析法的解析力量比自顶向下分析法要强大的多,和自顶向下分析法相比,它可以解析更为复杂、更为广泛的语法。但自底向上分析法的构造过程也复杂的多。分析器构造工具(如 bison )就是将用户定义的语法规则转化成一个自底向上分析器。看一个自底向上...

weixin_42298062的博客 960

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

2019编译原理实验报告存档(2)

LL(1)分析器,借鉴了别人的代码,被老师一眼识破,有够无语,直截了当问我“有多少是自己写的”… LL(1)部分 /* (1)E->TG * (2)G->+TG|-TG * (4)G->@ * (5)T->FS * (6)S->*FS|/FS * (8)S->@ * (9)F->(E) * (10)F->i * */ package ...

Hireath_的博客 346

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

编译原理——判断是否为LL(1)文法及构造分析表

在这里我们需要掌握两个知识点。 1.LL(1)文法定义 一个文法如果满足以下三条: 1)文法不含左递归 像这个样子A->Ab是不允许的 2)对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交。 即对于A->α1|α2|…|αn 要求FIRST(αi)∩FIRST(αj)=Ø (i≠j) 3)对于文法中的每个非终结符A,若它存在某个候选首符集包含ε,则 FIR...

weixin_44162921的博客 4万+
上一篇: 编译原理:消除左递归
下一篇: 【编译原理】LL1文法语法分析器
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值