📅  最后修改于: 2020-12-17 07:45:24             🧑  作者: Mango
推导是一系列生产规则。它用于通过这些生产规则获取输入字符串。在解析期间,我们必须做出两个决定。这些如下:
我们有两个选择来决定使用生产规则放置哪个非终端设备。
在最左侧的派生中,将扫描输入,并用生产规则从左到右替换输入。因此,在最左边的推导中,我们从左到右读取输入字符串。
生产规则:
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
在最右边的派生中,将扫描输入,并用生产规则从右到左替换输入。因此,在最右派生中,我们从右到左读取输入字符串。
生产规则:
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
当我们使用最左导数或最右导数时,我们可能会得到相同的字符串。这种派生类型不影响字符串的获取。
使用由给出的CFG推导字符串“ abb”表示最左派和最右派,
S → AB | ε
A → aB
B → Sb
解:
最左边的推导:
最右边的推导:
使用由给出的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
使用由给出的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