前言
参考东南大学廖力老师的编译原理教程和课上PPT内容。 该学习笔记目前仅打算个人使用。
后续会进一步整理,包括添加笔记内容,标明参考资料。
更新中。。。
状态图的画法(根据文法画出状态图)
左线性文法状态图的画法:
-
令 G 的每个非终结符都是一个状态;
-
设一个开始状态 S ;
-
若Q → T,Q ∈ Vn,T ∈ Vt,则:
-
若Q → RT,Q、R ∈ Vn,T ∈ Vt,则:
-
按自动机方法,可加上开始状态和终止状态标志。
例:正则文法G[Z]
Z → U0 | V1
U → Z1 | 1
V → Z0 | 0
左线性文法
L(G[Z]) = { Bn | n > 0 },其中 B = { 01,10 }
识别算法(自然语言描述)
利用状态图可按如下步骤分析和识别字符串 x:
- 置初始状态为当前状态,从 x 的最左字符开始,重复步骤2,直到 x 右端为止。
- 扫描 x 的下一个字符,在当前状态所射出的弧中找出标记有该字符的弧,并沿此弧过渡到下一个状态;
2.1 如果找不到标有该字符的弧,那么 x 不是句子,过程到此结束;
2.2 如果扫描的是 x 的最右端字符,并从当前状态出发沿着标有该字符的弧过渡到下一个状态为终止状态 Z,则 x 是句子。
例: x = 01101 和 1011
问题:
1、上述分析过程是属于自底向上分析?还是自顶向下分析?
2、怎样确定句柄?