context-free-grammar – 计算上下文无关语法中的单词

所以我有一个无法解决的上下文无关语法问题.这不是等级或其他东西,所以不要担心.

问题是这样的:

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解析器的下推自动机.在每个符号推送之后,如果生成的解析堆栈可以缩减为起始符号,则语法可以接受该字符串.继续这个直到所需的字符串长度.

基本上你是在模拟自动机并进行分支,因为你会在减少解析堆栈后尝试使用所有可能的输入进行模拟.

您可以避免完全构造自动机,只需查看给定每个状态的可能规则.

点赞