📜  自动机派生

📅  最后修改于: 2020-12-17 07:45:24             🧑  作者: Mango

推导

推导是一系列生产规则。它用于通过这些生产规则获取输入字符串。在解析期间,我们必须做出两个决定。这些如下:

  • 我们必须确定要替换的非终端。
  • 我们必须确定将替换非终端设备的生产规则。

我们有两个选择来决定使用生产规则放置哪个非终端设备。

1.最左派生:

在最左侧的派生中,将扫描输入,并用生产规则从左到右替换输入。因此,在最左边的推导中,我们从左到右读取输入字符串。

例:

生产规则:

E = E + E
E = E - E
E = a | b

输入值

a - b + a

最左边的推导是:

E = E + E
E = E - E + E
E = a - E + E
E = a - b + E
E = a - b + a

2.最右派生:

在最右边的派生中,将扫描输入,并用生产规则从右到左替换输入。因此,在最右派生中,我们从右到左读取输入字符串。

生产规则:

E = E + E
E = E - E
E = a | b

输入值

a - b + a

最右边的推导是:

E = E - E
E = E - E + E
E = E - E + a
E = E - b + a
E = a - b + a

当我们使用最左导数或最右导数时,我们可能会得到相同的字符串。这种派生类型不影响字符串的获取。

推导示例:

范例1:

使用由给出的CFG推导字符串“ abb”表示最左派和最右派,

S → AB | ε
A → aB
B → Sb

解:

最左边的推导:

最右边的推导:

范例2:

使用由给出的CFG推导字符串“ aabbabba”,以表示最左派和最右派,

S → aB | bA
 S → a | aS | bAA
S → b | aS | aBB

解:

最左边的推导:

S
aB            S → aB    
aaBB          B → aBB
aabB          B → b
aabbS         B → bS
aabbaB        S → aB
aabbabS       B → bS
aabbabbA      S → bA
aabbabba      A → a

最右边的推导:

S
aB            S → aB    
aaBB          B → aBB
aaBbS         B → bS
aaBbbA        S → bA
aaBbba        A → a
aabSbba       B → bS
aabbAbba      S → bA
aabbabba      A → a

范例3:

使用由给出的CFG推导字符串“ 00101”,用于最左派和最右派,

S → A1B
A → 0A | ε
B → 0B | 1B | ε

解:

最左边的推导:

S
A1B
0A1B
00A1B
001B
0010B
00101B
00101

最右边的推导:

S
A1B
A10B
A101B
A101
0A101
00A101
00101