词法分析 有穷自动机

        1. 有穷自动机的概念

        有穷自动机(FA)是词法分析的重要理论基础。系统根据自己的有穷状态和离散的输入信息决定系统的后序行为。每处理一个输入,系统内部状态也可能发生改变。

        其转换图表示法如下所示:

                          

        其中start指向的表示初始态,箭头上面的表示输入,有向边就是变化,圆圈内表示状态。多加了一个圈(双圈,状态3),表示结束态。在这种状态下就不接受输入了。

       如果一个串x,如果存在一个对应串x从开始状态到结束状态的转换序列,则称串x被该有穷自动机吸收。比如说上面的有穷自动机,对于串abbaabb,就是可以吸收的,串的对应的状态转换序列分别是:0000123. 

        一个有穷自动机M接收的所有串的集合称为FA定义的语言,记为L(M).  上面的自动机能够接收的语言,如果用正则表达式来表示的话,应该是(a|b)* abb.

      2. 有穷自动机的分类:

       有穷自动机分为确定有穷自动机(DFA)和非确定有穷自动机(NFA).

        DFA 确定有穷自动机可以用五元组来表示:

                    

        需要注意的是,对于确定的有穷自动机,一个输入决定的状态转移只可能有一个状态,这一点从根本上与非确定的有穷自动机相区别。确定和非确定的区别由此而来。我们来看一个确定有穷状态机的例子:

                   

        从状态转换表我们能看到,对应的一个状态,和一个输入,只能转换成其他另一个状态,而不是其他多个状态。比如状态0遇到a则变成状态1,遇到b的时候还是状态0.

        我们再来看看非确定的有穷自动机:

         

        只有δ的描述有区别,也就是说对于一个状态,和一个输入,可能有多种状态转移。 来看一个NFA的例子:

                        

         我们来看状态0,状态0遇到a的时候,既可能转移到状态1,也有可能保持状态0不变。这就是NFA。空集这里面表示这个状态不接受这个输入。

        那么有穷状态机是如何进行词法分析的呢?我们知道词法分时首要任务是如何从源文件中的ASCII码序列依次分离出单词,即如何判定新单词的开始、如何判定一个单词的结束以及如何判定是什么类的单词的问题。所以对于一个输入的字符串,我们将其扔进不同的类型单词的有穷状态机,当这个状态机能够匹配这个输入的单词的时候,我们就知道这个单词是什么类型了。

        字符串匹配了某一种类型的状态机,我们就知道了单词是什么类型,或者属于什么关键字,这就为下一步进行语法分析打下了基础。

        

发布了122 篇原创文章 · 获赞 147 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/hanzhen7541/article/details/104476192