我一直试图解决这个问题几个小时,而这只是一个无休止的试错循环。我需要明确地说明这个语法:
S -> Sa | Sb | aS | bS | aa
据我所知,这可以产生" aa"的任何组合。出现在某个地方。主要问题是它可以从两侧生成所以有几个解析树。到目前为止,我最好的尝试是这样的:
S -> aS | bS | aT
T -> aU | a
U -> bU | b
这会生成任何一个&b;然后强制第二个a,并允许添加更多b' s。这并不允许每一根字符串......不能做" abaaba"。我无法理解如何使这一点明确无误。
答案 0 :(得分:1)
尝试生成一个不包含两个连续P
的语言(a
)。 (这意味着每个a
必须跟随b
)。另一种语言(S
)可以包含a
和b
的任何序列。然后,您可以明确地将语言解析为PaaS
。 (这是明确的,因为该生产中的aa
必须是要生成的字符串中的第一个。)
(我分别从Prefix和Suffix中选择了P
和S
。有时数学太简洁了。)