语言和语法回顾
参见我的另一篇博文:http://blog.youkuaiyun.com/cuiods/article/details/52442584
语言的构造方法有两种:全组合(full combination)和部分组合(partial combination)。
- 全组合:用字母表 Σ 的闭包表示( Σ *)
- 部分组合:基于规则的语法(rule-based grammar)
从语法可以推导出符合语法规则的语言:G==Derivation=>L(G)
极左推导示例:
Grammar:
E => E + F | F
F => F * G | G
G => (E) | i
Leftmost derivation:
E => E + F => F + F => G + F => i + F => i + G => i + i
最左规约是最右推导的逆过程。
从语言归纳到语法一般依靠经验方法,以下五种方法是常见的经验方法。
方法1:对称法(Symmetrical Method )
典型问题:明显的对称特征
Example1:Let L1={a2nbn|n>=1 and a,b ∈ VT},Try to construct the grammar G1 from L1
Let n=1, L1 =aab
n=2, L1 =aaaabb
n=3, L1 =aaaaaabbb
……
解决步骤:
- Find out axis - special case : 找到对称特例,比如在上面的问题中第一步找到的特例就是
S->aab
。 - Find out the symmetrical properties: 我的理解就是找到对称轴,然后把对称的非终结符放在对称轴上,在上面的问题中,第二步就是
S->aaSb
。
因此,Example1的答案就是S->aab|aaSb
。(这种语法是之前提到的嵌入式语法(embedded grammar))
用这种方法可以方便地表示回文数(palindrome)。
1. axis: S -> 0|1|2|…|9|