LL(1)分析算法_ll算法-程序员宅基地

技术标签: Compile  

LL(1)分析算法

//在现代编译器的架构上,词法分析器都是作为语法分析器的一个子模块来实现的,并不是这些记号流一
次性全都调用出来了,而是说,根据语法分析器需要,当它需要一个记号流,才会调用,然后返回一个记
号流。下次调用,下次再返回,这样的一个交互式的过程。

定义:

从左( L) 向右读入程序,最左( L) 推导,采用一个( 1) 前看符号(lookhead,这个前看符号是用来作辅助判断用的,也就是说这个前看符号就是用来查LL(1)分析表的)

优点:

分析高效(线性时间)
错误定位和诊断信息准确
有很多开源或商业的生成工具(ANTLR,。。。)

算法基本思想:

表驱动的分析算法

表驱动的LL分析器架构

这里写图片描述

回顾:自顶向下分析算法

tokens[]; // all tokens——本质上它是程序中输入的所有的记号
i=0;
stack = [S] // S是开始符号
while (stack != [])
    if (stack[top] is a terminal t)
        if (t==tokens[i++])
            pop();
        else backtrack();//回溯
    else if (stack[top] is a nonterminal T)
        pop(); 
        push(the next right hand side of T)

LL(1)分析法

//LL(1)分析算法本质上,就是用栈来显示地实现非递归版本的递归下降分析,或者说非递归版本的树的遍历的一个过程。
这里写图片描述

LL(1)分析表

这里写图片描述

LL(1)分析流程

这里写图片描述

FIRST集

这里写图片描述

FIRST集的不动点算法

这里写图片描述

把FIRST集推广到任意串上

这里写图片描述

构造LL(1)分析表

这里写图片描述

LL(1)分析表中的冲突

这里写图片描述

一般条件下的LL(1)分析表构造

这里写图片描述

NULLABLE集合

这里写图片描述

NULLABLE集合算法

这里写图片描述

FIRST集合的完整计算公式

这里写图片描述

FIRST集的不动点算法

这里写图片描述

FIRST集计算示例

这里写图片描述

FOLLOW集的不动点算法

这里写图片描述

FOLLOW集计算示例

这里写图片描述

计算FIRST_S集合

示例:构造FIRST_S集

示例:构造LL(1)分析表

LL(1)分析器

这里写图片描述


//2017-05-16更新
LL(1)分析表中的冲突解决方法
1.消除左递归
2.提取左公因式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shaguabufadai/article/details/71756493

智能推荐

android 监听网络状态的广播_安卓开发监听网络变化类广播-程序员宅基地

文章浏览阅读397次。public void registerNetBroadcast(){ netBroadcastReceiver = new NetBroadcastReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); registerReceiver(netBroadcastRec..._安卓开发监听网络变化类广播

linux的文件权限设置_linux open文件权限-程序员宅基地

文章浏览阅读701次。目录前言权限查看权限设置前言复习一下上一篇的<close open 函数>open 函数是 打开已经存在的文件 否则就会出错 如果没有 就有touch 创建即可 权限查看先用 man 2 open 进入这章讲解第三行的函数 他一共有三个参数 参数1 : 是目录名参数2 :文件属性参数3 是我们这次要讲的内容 先创建一个c文件 简单写一下前面一节的代码运行结果 报错 解决方式 返回终端看看一些数据左边的是什么意思 还有在大框中的三个小框分别是什么意_linux open文件权限

MT4缠论公式指标(缠中狩猎外汇MT4缠论分笔分段中枢公式指标)_mt4缠论指标-程序员宅基地

文章浏览阅读1.4w次,点赞9次,收藏16次。一年前发布的MT4版缠中狩猎缠论工具包,外汇MT4版缠论工具包和之前通达信版本实现逻辑完全一致,参数设置用法完全一致,具体可以参考缠中狩猎缠论工具包使用说明文档。但是由于外汇MT4版加载的数据较多,前一版缠友们普遍反应有时会卡顿。 前几天抽空对MT4版缠论公式指标进行了性能优化,增加K线加载数量限制,可以根据自己需求来设置加载K线数量。如下图参数设置,默认加载9999根K线,一般不看太久的历史数据..._mt4缠论指标

WinSCP(Windows与Linux文件同步工具)使用总结_linux winscp 代码同步本地工具-程序员宅基地

文章浏览阅读7.3k次。使用WinSCP在Windows和Linux之间同步文件,见官方中文介绍同步Linux服务器文件到本地 11111111111_linux winscp 代码同步本地工具

GPS数据格式转换_ddmm.mmmm-程序员宅基地

文章浏览阅读1.6k次。转自:http://jayyanzhang2010.iteye.com/blog/1771643GPS 串口读出的是 DDMM.MMMM格式 一般上位机是 DD.DDDDDD°或 DD°MM'SS" 格式, 这两种都可以在 GE 里直接输入 举例说明: 3147.8749 (示例,经纬度一样) 格式为 DDMM.MMMM 转换成度: 1. 度的部分直接就是31, 2.剩下的 MM.MMMM/..._ddmm.mmmm

Javascript实现树结构_js jq 树结构-程序员宅基地

文章浏览阅读5.1k次。树节点属性 Node data:节点值 parent :指向节点的父节点 children:指向节点的孩子节点Tree 属性与方法 _root :树的根节点 traverseDF(callback) :深度遍历 traverseBF(callback):广度遍历树的实现树节点定义: function Nod_js jq 树结构

随便推点

本地外卖市场趋势怎么样?成为行业黑马的机会有多大呢?_外卖走势怎么样-程序员宅基地

文章浏览阅读154次。外卖市场正处于风口浪尖上,对于还观望外卖市场的伙伴,可以看一下本地外卖市场趋势怎么样?_外卖走势怎么样

kepware 发生 Setup was unable to initialize your PC错误解决办法_kepserverex怎么彻底卸载-程序员宅基地

文章浏览阅读5.4k次。kepware 发生 Setup was unable to initialize your PC错误解决办法第一步:卸载kepware , 删除注册表(最简单办法使用软件管家卸载)第二步:重启电脑第三步:关闭360等杀毒软件第四步:重新安装kepware,不会再出现“ Setup was unable to initialize your PC” 错误。以上运行_kepserverex怎么彻底卸载

用 HTML 做一个表单模板_表单html制作模板-程序员宅基地

文章浏览阅读8.7k次,点赞8次,收藏46次。本文包括了 HTML 的简述和用 HTML 做一个表单模板的相关内容。。。_表单html制作模板

ICON艾肯live声卡系列驱动安装设置方法_icon duo live22使用-程序员宅基地

文章浏览阅读1w次。ICON艾肯live系列usb外置声卡包括Cube 4Nano 2nano 6Nano Duo22 Duo44 MicU MobileR MobileU MobileU MINI VH4 Uports2 Uports4 Uports6 Utrack UtrackPro Ultra 4 Platform U22 VH6等多种型号。如何安装声卡驱动;首先要进入icon声卡官网,点击live录制声卡,找到对应的声卡型号;比如以cube 4nano live声卡为例,点击cube 4nano live图片,找到下载_icon duo live22使用

网络攻防实验-XSS攻击-基于Elgg-Task1-4_elgg如何登入-程序员宅基地

文章浏览阅读8.2k次,点赞3次,收藏14次。网络攻防实验报告 ——XSS攻击何为XSS攻击?XSS即Cross-site scripting跨站脚本,它是一种经常在web应用中出现的漏洞,攻击者可以使用该漏洞注入一些恶意代码以实现对受害者的攻击。一、实验环境_elgg如何登入

MIDI 文件格式解析举例_c# mid文件解析-程序员宅基地

文章浏览阅读2.6k次。变长动态字节 首先学习 MIDI 一个编码约定,MIDI 使用字节流(1bytes)来传输数据,对于小于 127 的数据就用一个字节存储。大于127的数据把字节的高位用来标识长数据,这样方便程序解析(一般情况高位为0认为一个byte是一个数据,如果出现高位为1(most significant bit)就读取多个字节再解析 int或者long),具体解析过程是最后一个字节前都用高位置1声明这是一个长整数的一部分。 示例图:文件组成块 MIDI 是这样组织的:M..._c# mid文件解析

推荐文章

热门文章

相关标签