所以我有一个无法解决的上下文无关语法问题。这不是等级或其他东西,所以不要担心。
有一个看起来像
的无上下文语法S - > S1 | S2
S1 - > aS1B |乙
S2 - > S2aB |乙
B - > bS | B'/ P>
任务是编写一个函数(用任何编程语言) count_words(N)。函数需要返回带有“n”的单词数 长度,在这种上下文自由语言中“参与”。
* 假设我用count_words(3)调用函数,函数必须返回可能的单词数(在该上下文中的自由语言) 长度为3.那就是:bab,abb,aab等。
任何人都可以帮助我吗?我根本不知道......假设这并不难,但我不能强迫自己思考正确的方法。
答案 0 :(得分:2)
您需要模拟语法。给定终端a
和b
,构建一个接受您的语言的自动机。由于您提供的语法是左递归语法,因此可以选择构造类似于LR解析器的下推自动机。在每个符号推送之后,如果生成的解析堆栈可以缩减为起始符号,则语法可以接受该字符串。继续这个直到所需的字符串长度。
基本上你是在模拟自动机并进行分支,因为你会在减少解析堆栈之后尝试使用所有可能的输入进行模拟。
您可以完全避免构建自动机,只需查看给定每个州的可能规则。