解决模棱两可的语法

时间:2015-02-12 02:09:59

标签: context-free-grammar ambiguity ambiguous

我一直试图解决这个问题几个小时,而这只是一个无休止的试错循环。我需要明确地说明这个语法:

S -> Sa | Sb | aS | bS | aa

据我所知,这可以产生" aa"的任何组合。出现在某个地方。主要问题是它可以从两侧生成所以有几个解析树。到目前为止,我最好的尝试是这样的:

S -> aS | bS | aT
T -> aU | a
U -> bU | b

这会生成任何一个&b;然后强制第二个a,并允许添加更多b' s。这并不允许每一根字符串......不能做" abaaba"。我无法理解如何使这一点明确无误。

1 个答案:

答案 0 :(得分:1)

尝试生成一个不包含两个连续P的语言(a)。 (这意味着每个a必须跟随b)。另一种语言(S)可以包含ab的任何序列。然后,您可以明确地将语言解析为PaaS。 (这是明确的,因为该生产中的aa必须是要生成的字符串中的第一个。)

(我分别从Prefix和Suffix中选择了PS。有时数学太简洁了。)