feather12315
2017-07-03 01:15:03 +08:00
什么是有限状态机?这个问题…
老师上课给了这几个例子:
{ a^n b^n c^n | n >= 1 } 上下文有关文法,csl,1 型文法
{ a^m b^m c^n | m,n >= 1 } 上下文无关文法,cfl,2 型文法
{ a^k b^m c^n | k,m,n >= 1 } 有限自动机,3 型文法
注意 2 型文法与 3 型文法的区别:多了 m。 这可以理解为记忆性,是靠下推栈来实现的( 3 型文法是 2 型文法的真子集)。
有限状态机的实现,实现就是正则表达式。是将 3 型文法转换为 NFA (不确定有限状态机)或者 DFA (确定有限状态机)。数学上可以证明 NFA 与 DFA 是等价的,但根据<<精通正则表达式>>这书的观点,在效果上他俩还是不一样的。
编译原理,语法分析(就是在讲上下文无关文法)后语法制导的翻译,有一章节内容在讲 if-else 的翻译。我是根据这点判断 if-else 属于上下文无关文法的。(如有错误请指正)。
其实,目前的所有计算机语言都可以说是上下文无关文法。但是它的超集:因为上下文无关文法无法解决--1.变量声明,2.函数参数检查这样的问题。实际上怎么实现?
老师在课上提到了符号表的一个作用:把上下文无关文法无法做到的事情放在语义分析里面做,这俩工作就是通过符号表在语义分析里面完成的。