我可以将此推导视为最左 or/and 最右吗?
Can I consider this derivation as Leftmost or/and Rightmost?
例如,我想从给定的生产集合中导出字符串 'aabbccdd':
S -> AB | C
A -> aAb | ab
B -> cBd | cd
C -> aCd | aDd
D -> bDc | bc
我可以使用最左推导和最右推导从 AB 推导出字符串。
但是 C 语言呢?在导出字符串时,我总是只有一个变量。
从 C 推导:
S -> C
S -> aCd
S -> aaDdd
S -> aabDcdd
S -> aabbccdd
使用了什么样的推导,我可以认为这个语法有歧义吗?
在最右推导中,推导最右非终结符。在最左推导中,推导最左边的非终结符。如果只有一个非终结符,则推导是最左和最右的。这并不矛盾。
由于以S
开头的目标字符串有两个推导,语法有歧义。
例如,我想从给定的生产集合中导出字符串 'aabbccdd':
S -> AB | C
A -> aAb | ab
B -> cBd | cd
C -> aCd | aDd
D -> bDc | bc
我可以使用最左推导和最右推导从 AB 推导出字符串。
但是 C 语言呢?在导出字符串时,我总是只有一个变量。
从 C 推导:
S -> C
S -> aCd
S -> aaDdd
S -> aabDcdd
S -> aabbccdd
使用了什么样的推导,我可以认为这个语法有歧义吗?
在最右推导中,推导最右非终结符。在最左推导中,推导最左边的非终结符。如果只有一个非终结符,则推导是最左和最右的。这并不矛盾。
由于以
S
开头的目标字符串有两个推导,语法有歧义。