所以我有一个无法解决的上下文无关语法问题.这不是等级或其他东西,所以不要担心.
问题是这样的:
There’s a context free grammar that looks like
S -> S1 | S2
S1 -> aS1B | B
S2 -> S2aB | B
B -> bS | b
Task is to write a function (in any programming language)
count_words(n). Function needs to return number of words with “n”
length, that are “involved” in this context free language.* let’s say I call function with count_words(3), function must return number of possible words (inside that context free language)
that are length of 3. That would be: bab, abb, aab etc.
任何人都可以帮助我吗?我根本不知道……假设这并不难,但我不能强迫自己思考正确的方法.
最佳答案 您需要模拟语法.给定终端a和b,构造一个接受您的语言的自动机.由于您提供的语法是左递归语法,因此可以选择构造类似于LR解析器的下推自动机.在每个符号推送之后,如果生成的解析堆栈可以缩减为起始符号,则语法可以接受该字符串.继续这个直到所需的字符串长度.
基本上你是在模拟自动机并进行分支,因为你会在减少解析堆栈后尝试使用所有可能的输入进行模拟.
您可以避免完全构造自动机,只需查看给定每个状态的可能规则.