编译原理
2016-04-24 21:10
495 查看
短语:子树末端结点符号串
直接短语:两层子树的末端结点符号串
句柄:最左直接短语
单词的描述工具: 正规表达式(正则表达式) 有穷自动机
运算符优先级: ()* . |
B -> y
A -> x|y A -> x
A -> y
A -> x*y A -> xA
A -> y
2.状态集合I的闭包:&-closure(I): 1:I自身 2:I经过任意多个连续空弧能到达的状态
如果有多个初态,把多个初态放在一起求闭包
一致性条件:s,t同为可接受状态或同为不可接受状态(同为终态,同为非终态)
蔓延性条件:对于所有的输入符号,s,t必须转换到等价状态里
e.g. R = (a|b)*abb
识别输入串 w = cabd是不是该文法的句子
因为A能推出两种情况,所以是不缺定的自顶向下方法
确定的自顶向下方法有三种情况:
1.文法右侧都是非终结符,非终结符的首部不同
2.产生式右侧不全是非终结符,右部首字符不同,无空产生式
3.文法中含空产生式--->FOLLOW集
1.经过若干步推导,求出首部为a的集合
2.若a能推出空集,则空集属于FIRST(a)
S -> axc 则 FIRST(S) = {a}
1.对文法的识别符号Z,令#属于FOLLOW(Z)
2.若文法中有形如A->aUb的规则,则FIRST(b)中的非空元素属于FOLLOW(U)
3.若文法中有形如A->aU或A->aUb且FIRST(b)含有空这样的规则,则FOLLOW(A)的元素属于FOLLOW(U)
A -> ccdUb 则 FOLLOW(U) = FIRST(A) = c
A -> ccdU 则 FOLLOW(U) = FOLLOW(A) = ....
1.若a不能推出空,则SELECT(A -> a) = FIRST(a)
2.若a能推出空,则SELECT(A -> a) = (FIRST(a) - 空) 并 FOLLOW(A)
第二个L:分析时用最左推导
1:表明只需向右看一个符号就能决定哪个产生式进行推导
直接短语:两层子树的末端结点符号串
句柄:最左直接短语
单词的描述工具: 正规表达式(正则表达式) 有穷自动机
运算符优先级: ()* . |
重写:
A -> xy : A -> xBB -> y
A -> x|y A -> x
A -> y
A -> x*y A -> xA
A -> y
正规式转正规文法:
正规式:R = a(a|d)* 文法: S -> a(a|d)* S -> aB B -> (a|d)* S -> aB B -> (a|d)B B -> & S -> aB B -> aB B -> dB B -> & 练习:R = 1(0|1)*101
正规文法转正规式:
G[S]: S -> aA -----+ S -> a -----+--- S -> a|aA S -> a(&|A) 【1】 A -> aA ----+ A -> dA ----| A -> a ----| A -> d ----+---- A -> aA|dA|a|d A -> (a|d)A|(a|d) A -> (a|d)*(a|d) A -> (a|d)+ 带入【1】中 S -> a(&|(a|d)+) S -> a(a|d)*
编译原理(二)确定的有穷自动机DFA与不确定的有穷自动机NFA
有穷自动机:只有一个初态,可以有多个终态NFA与DFA的转换
1.a弧转换:move(I, a) I状态,输入a,可到达的状态2.状态集合I的闭包:&-closure(I): 1:I自身 2:I经过任意多个连续空弧能到达的状态
如果有多个初态,把多个初态放在一起求闭包
有穷自动机的化简——去多余,合等价
两个状态等价的条件:一致性条件:s,t同为可接受状态或同为不可接受状态(同为终态,同为非终态)
蔓延性条件:对于所有的输入符号,s,t必须转换到等价状态里
编译原理(三)正规式和有穷自动机的等价性
e.g. R = (a|b)*abb
编译原理(四)语法分析与FIRST,FLLOW,SELECT集
例
G: S -> cAd A -> ab A -> a
识别输入串 w = cabd是不是该文法的句子
因为A能推出两种情况,所以是不缺定的自顶向下方法
确定的自顶向下方法有三种情况:
1.文法右侧都是非终结符,非终结符的首部不同
2.产生式右侧不全是非终结符,右部首字符不同,无空产生式
3.文法中含空产生式--->FOLLOW集
FIRST集
FIRST(a)1.经过若干步推导,求出首部为a的集合
2.若a能推出空集,则空集属于FIRST(a)
S -> axc 则 FIRST(S) = {a}
FOLLOW集
FOLLOW(U)1.对文法的识别符号Z,令#属于FOLLOW(Z)
2.若文法中有形如A->aUb的规则,则FIRST(b)中的非空元素属于FOLLOW(U)
3.若文法中有形如A->aU或A->aUb且FIRST(b)含有空这样的规则,则FOLLOW(A)的元素属于FOLLOW(U)
A -> ccdUb 则 FOLLOW(U) = FIRST(A) = c
A -> ccdU 则 FOLLOW(U) = FOLLOW(A) = ....
SELECT集
SELECT(A -> a)1.若a不能推出空,则SELECT(A -> a) = FIRST(a)
2.若a能推出空,则SELECT(A -> a) = (FIRST(a) - 空) 并 FOLLOW(A)
LL(1)文法
第一个L:自顶向下分析是从左向右扫描输入串第二个L:分析时用最左推导
1:表明只需向右看一个符号就能决定哪个产生式进行推导
如何判断一个文法是否是LL(1)文法
同一个非终结符推导出的任意两个SELECT集的交集为空例2
判断以下文法是否是LL(1)文法G: S -> aAbDe|d A -> BSD|e B -> SAc|cD|空 D -> Se|空
相关文章推荐
- hdu 2767 Proving Equivalences(强连通入门题)
- Spark使用总结
- tcp协议单用户图片上传
- java的面向对象
- Matlab一个计算不同拉普拉斯矩阵的小函数
- 码农小汪-Map遍历的时候删除元素
- CSS3中的变形与动画(上)【2D】
- noip2014解方程(真不知道那些大神怎么想到取模的,竟然考这个?!)
- fzu 2216 The Longest Straight
- 20145239杜文超 《Java程序设计》第8周学习总结
- 20145110 《Java程序设计》第八周学习总结
- 20145326蔡馨熠 实验三 "敏捷开发与XP实践"
- 打地鼠
- Android实现IOS向右滑动退出当前Activity
- COBBLER无人值守安装
- 如何安装ArcGis和Axwoman
- Java 匿名内部类
- zoj-3944-People Counting
- maven打包时跳过测试
- 【NOIP提高组2015D2T1】uva 714 copying books【二分答案】——yhx