【问题标题】:Count words in context free grammar计算上下文无关语法中的单词
【发布时间】:2016-02-12 03:59:26
【问题描述】:

所以我遇到了一个与上下文无关的语法问题,但我没能解决。这不是为了成绩什么的,所以不要担心。

问题是这样的:

有一个上下文无关的语法,看起来像

S -> S1 | S2

S1 -> aS1B |乙

S2 -> S2aB |乙

B -> bS | b

任务是写一个函数(用任何编程语言) count_words(n)。函数需要返回带有“n”的单词数 长度,在这种上下文无关语言中“涉及”。

* 假设我用 count_words(3) 调用函数,函数必须返回可能单词的数量(在该上下文无关语言中) 长度为 3。即:bab、abb、aab 等。

谁能帮我解决这个问题?我完全不知道......假设这并不难,但我不能强迫自己思考正确的方式。

【问题讨论】:

    标签: context-free-grammar


    【解决方案1】:

    您需要模拟语法。给定终端ab,构造一个接受您的语言的自动机。由于您提供的语法是左递归语法,因此可以选择构造一个类似于 LR 解析器的下推自动机。在每次符号推送之后,如果生成的解析堆栈可以减少到起始符号,则该字符串可以被文法接受。继续此操作,直到所需的字符串长度。

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

    您可以避免完全构建自动机,而只需查看在给定每个状态时您处于哪些可能的规则。

    【讨论】:

    • 我会尽量遵循这个逻辑。谢谢。
    • 您可以考虑接受一些答案。你问了四个关于堆栈溢出的问题,但没有接受任何答案。向帮助过你的人表示感谢比发表评论要好得多。
    • 抱歉,我一直在尝试投票但没有足够的积分。我现在已经接受了你的回答。
    • 没问题,很高兴在这两方面都为您提供帮助:)
    猜你喜欢
    • 2013-11-21
    • 2011-05-24
    • 2015-09-18
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2013-02-23
    相关资源
    最近更新 更多