在计算机科学中,自动机是一种可以有限状态转换的计算模型。自动机是指一种接受或拒绝输入的数学模型。它可以被用来描述许多现实生活中的实体(如在自动化、语言设计、计算等方面)。文法G[S]的自动机也是一种自动机,它通过一个文法生成一个自动机。
文法G[S]是形如以下的形式:
S → aB | aA
A → bB | aS
B → bS | ε
其中,S, A, B 都是非终止符号;a, b 是终止符号,ε 表示空符号。
aB、aA表示S产生的第一种情况,bB、aS表示S产生的第二种情况,bS表示S产生的第三种情况。
下面分别从文法G[S]和它对应的自动机的角度入手来分析它。
从文法G[S]角度分析
首先,需要了解几个术语:
1. 非终点符号(非终止符号):也就是上面提到的S, A, B等符号。非终止符号可以表示一个或多个符号串。
2. 终点符号(终止符号):由一个字符组成,例如:a、b等。
3. 产生式(规则):是形如A -> α的形式,在其中,A是非终止符号,α是由非终止符和/或终止符组成的符号串。
以下是对文法G[S]的分析:
文法G[S]中的产生式是怎么定义的?
Just now,已经看到文法G[S]的产生式,下面解释一下产生式定义的意思。
1. 第一个产生式:S → aB | aA
“|”是用来表示或的符号,aB和aA都是S能够生成的结果。需要注意的是,这两个产生式之间是“或”的关系,即在自动机中它们的状态时互斥的。
2. 第二个产生式:A → bB | aS
如果在文法中的输入是一个A,那么在B的前面加上一个b或在输入的S后面加上a都是可以得到该串的。这和S的产生式是相似的。
3. 第三个产生式:B → bS | ε
这里的“ε”表示空串,如果在该文法中输入B,它有两种转换的可能:添加一个b,在S的前面添加一个空串——这会使它回到对于S的那个选择。如果遇到了S,这产生了另一个空串或者b ——这种情况即是输入了字符串。
接下来需要将该文法转化为自动机。
从自动机角度分析
自动机包含状态和转换。状态是指某个时刻机器所处的情况,它具有继承特性。转移指某个状态下,如何根据输入字符进行状态转移的规则。当自动机经过某些状态后,会认为自己已经完成了任务。下面,我们就来看看下述文法G[S]的自动机实现方法。
以下是该文法对应的自动机:
该自动机有四个状态 S, A, B, error。其中error表示读入的语句不合法或者无法转化的情况。S是该自动机的起始状态,而A和B表示S可以转移到的状态。这些状态和文法G [S]中的非终止符号一一对应。就此而言,自动机的状态是由文法G[S]的属性决定的。
现在来看看自动机的转移。
1. S -> aA
该转换表示S将单一的输入a转化为状态A。
2. S -> aB
该转换也是表示S将单一的输入a转化为状态B。但是和第一种转换不同的是,这个转移不回到S状态。
3. A -> bB
在状态A输入b,将会转化为状态B。
4. A -> aS
在状态A输入a,将会转化为状态S。
5. B -> bS
在状态B输入b,将会转化为状态S。
6. B -> ε
这里的“ε”表示空串,意味着一个空串输入会将状态B回到状态S
在该自动机中,当自动机运行到终止状态S时,它会认为自己已经接受了该输入。如果自动机在任何时候进入了错误状态error中,它将终止运行。
扫码领取最新备考资料