【COMP218 笔记6】

(Begin from p37)​​​​​​​

Parsing推导一个content free language怎么获得的input太复杂了,需要尝试每一个derivation,就像下图:

【COMP218 笔记6】_第1张图片

为了解决如果input不属于这个languge,那么推导永远也不会停止的problem:

(这里提出一个概念叫:nullable-- 1.如果一个varialbe可以推导出ε,那么他就是nullable的 2. 如果B -> CD,但CD都可以推导出ε,那么B也是nullable的)

1. Remove all ε-productions,方法如下

【COMP218 笔记6】_第2张图片

例:

【COMP218 笔记6】_第3张图片

 最后的结果:

【COMP218 笔记6】_第4张图片

2. Removal of unit productions 

【COMP218 笔记6】_第5张图片

 例:

【COMP218 笔记6】_第6张图片

【COMP218 笔记6】_第7张图片

 例:

【COMP218 笔记6】_第8张图片

 3. 及时停止如果满足:|derived string| > |input| 

例:

【COMP218 笔记6】_第9张图片

Cocke-Younger-Kasami algorithm (CYK) : a faster way to parse 

To use CYK algorithm, we should convert CFG to Chomsky Normal Form :

Step 1. Eliminate ε productions 

Step 2. Eliminate unit productions 

Step 3. Add rules for terminals and split longer sequences of non-terminals 

>> Chomsky Normal Form 

这个form只允许出现 A → BC / A → a 这两种形式,()转化需要两步:

【COMP218 笔记6】_第10张图片

例:From tutorial 7 

【COMP218 笔记6】_第11张图片

Answer:

【COMP218 笔记6】_第12张图片

 >> CYK algorithm

Pushdown automata(PDA)

【COMP218 笔记6】_第13张图片

引入了stack,其中右边是notation of PDA,最终stack里是不能留有x的,所以这里每读一个0要push一个x,而每read一个1要pop一个x,为了不能留有x所以控制了read1和0的数量一样的条件:L = {0^{n}1^{n} : n ≥ 1}  

右边的图:记住左边是pop 右边是push 先push 再pop

【COMP218 笔记6】_第14张图片

这是PDA的定义,其中transition function很重要【COMP218 笔记6】_第15张图片

 例:有点复杂..

【COMP218 笔记6】_第16张图片

CFG ↔ PDA conversions 

(End with p92)

你可能感兴趣的:(COMP218,算法)