语法分器析总结

语法分析器的知识框图

懒得详细总结了。简单说下LR以及LL算法。

  LR与LL代表两种对语法的分析方法,第一个字母代表程序的读入顺序,即从左向右读,第二个代表规则的推导,LR代表从右向左推导,LL代表从左向右推导。后边如果有数字的话,代表前看符号。LR算法相比较LL则可以分析更多的文法,也不需要进行一些改写。

  LL算法是种主要是通过获取分析表实现对语法的判定。其中最主要是为了求得FIRST_S集(字符串的FIRST集)。其它一些集合的计算都是为了得到FIRST_S集合,利用FIRST_S集合可以很方便的构建分析表。然后利用一个栈加上分析表可以实现自顶向下分析。

  LR算法主要需要解决的一个问题是移进(shift)与规约(reduce)冲突。最简单的是LR0算法很容易产生移进与规约冲突,所以有了改进的SLR(Small LR)算法,这个算法主要利用规约后的FOLLOW集是否包含接下来的字符从而判定是否该规约。这里由于对于某个非结束字符FOLLOW集合过大,所有又有了LR1的改进,利用一个前看符号,对不同状态的向前看一个字母。从而确定是否应该规约,这里需要注意这里的一个前看字符一般要比FOLLOW集要小,所以可以更好的减少移进与规约冲突的发生。而LALR(Look Ahead LR)算法则相当于LR1与SLR算法的一种折中算法。将一些状态的前看符号进行结合,从而减少移进与规约表的规模。对于移进与规约冲突的解决优化一般是按照以下排列:

LR1>LALR>SLR>LR0

当然,产生的移进与规约表的复杂度正好是相反的。

时间: 2024-10-20 19:11:19

语法分器析总结的相关文章

工作中的那些坑(2)——语法解析器

工作项目里用到线性回归算法,用于计算账户的分值,表明某账户是否是有风险的账户.其中参数都配好了,代码里直接用逆波兰表达式解析即可.本来事情到这里已经结束,突然来了新的需求:账户算出来的分数较为无序,于是考虑用sigmoid函数将其映射到(0,1)区间内,在乘以系数使其显示更为直观.为了使整个表达式更将通用,要求做到同时能解析sigmoid函数,即:原来单纯解析常量.变量.运算符的逆波兰表达式已经不能直接解析新增的sigmoid函数(即表达式),另外对嵌套的情况也没做处理,所以需要重新设计一个更为

分享15个美化源码的代码语法着色器

语法高亮是文本编辑器用来显示文本的,特别是源代码,根据不同的类别来用不同的颜色和字体显示.这个功能有助于编写结构化的语言,比如编程语言,标记语言,这些语言的语法错误显示是有区别的.语法高亮并不会影响文本自身的意义,而且能很好的符合人们的阅读习惯. 语法高亮同时也能帮助开发者很快的找到他们程序中的错误.例如,大部分编辑器会用不同的颜色突出字符串常量.所以,非常容易发现是否遗漏了分隔符,因为相对于其他文本颜色不同. 现在有各种各样的语法高亮工具,可以格式化语言,并且根据不同的编程语言进行高亮显示.无

js语法检查器

将以下代码拷贝到新的HTML文件中打开即可看到效果! <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head> <meta charset="utf-8" /> <title>JS语法检查器</title> <style> .js-color-reservedword {

MySQL技术探索01实现SQL语法解析器

本文将介绍如何使用开源的语法和词法分析框架bison和flex来实现SQL解析器.出于技术学习的目的,本文做描述的微型SQL解析器仅能实现对微型SQL的语法解析. 1.MySQL中的SQL解析器 包括JDBC.ODBC.ADO等等关系数据库客户端应用开发框架在内的各种SDK,核心功能是帮助程序员简化各种客户端的数据库操作,同时将SQL语句通过网络形式发送给MySQL等关系数据库的服务器进程.MySQL服务器进行负责解析并执行这些SQL语句.SQL语句中的语法规则多种多样,MySQL服务器是如何实

语法解析器!

举例:将i = a + b * c作为源代码输入到解析器里,则广义上的解析器的工作流程如下图:   发表时间:2009-10-17           最后修改:2011-03-04 <         >              猎头职位: 上海: Senior Software Engineer 相关文章: 深入理解JVM 透过JVM看Exception本质 历史篇:Java虚拟机家族考 推荐群组: 高级语言虚拟机               更多相关推荐 编程综合 (Disclaime

oc语法-枚举器

2015-05-14 22:20:56 1:基于块的枚举 枚举器---循环 1 //使用枚举器进行循环操作 2 NSArray* array = @[@"aa",@"bb",@"cc",@"dd",@"ee",@"ff",@"gg"]; 3 [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL

一个简单的C语言语法检查器的实现

我自己的实现方法的核心过程:首先用一个非终结符代表所有要检查的程序代码,然后根据文法将这个整体的符号不断展开,以拼凑成按检查的程序的顺序排列的终结符序列,能成功说明语法正确,否则有错误. 关键词:分词:First集:Select集: 目前还存在的问题: 1.因为同一个非终结符->终结符的转化可能有多种解释,所以目前我的非终结符展开这里是用递归写的,因此不能定位具体错在哪里. 2.int a={1,2};int a[2]={1,'b'};这种该出错的地方不会出错.这个比较致命,但目前还没想好怎么解

经 验 分 析 红 黑 大 战 挂 是 真 赢 了

分析师[????????????????]邀请[????????????????]网cp15115点c0m1.Integer 转为String类型,使用toString()函数,报错,需养成良好规范使用下面的语句:versions.get(i)+"";1 2.mysql自增ID起始值修改方法alter table users AUTO_INCREMENT=10000;1 3.windows解决端口占用问题netstat -ano | findstr 8090(端口)taskkill /

MYSQL 源代码 编译原理 AST和解析树 代码语法解析

MYSQL 源代码 编译原理 AST和解析树 代码语法解析 http://blog.csdn.net/wfp458113181wfp/article/details/17082355 使用AST树 分类:             antlr              2013-12-02 22:39     255人阅读     评论(0)     收藏     举报 目录(?)[+] 第五章使用AST树中间结果来计算表达式值 创建ASTS 第五章.使用AST树中间结果来计算表达式值 现在我们已