algorithm - 借助堆栈确定该单词来自语言

标签 algorithm stack

借助堆栈确定单词来自特定语言的算法是什么?

我知道我可以将单词逐个符号放入堆栈中,同时我可以记录有关符号的任何所需信息,但这与仅迭代单词没有什么不同。

最佳答案

如果语言由 context-free grammar 定义,特定单词的成员资格可以通过所谓的 CYK-Algorithm 有效地确定。 .

上例中给出的语言可以用以下上下文无关语法表示,其中 epsilon 表示空字符串。

S -> epsilon | aSb | ab

更新

要使 CYK 算法适用,语法必须为 Chomsky normal form ;对于上面的语法,可以按如下方式完成。

S -> epsilon | AT | AB
T -> SB
A -> a
B -> b

在此公式中,AB 是终结符 ab 的人工非终结符; T 是一个人工变量,因为每个右侧最多可以包含两个非终结符而引入。

关于algorithm - 借助堆栈确定该单词来自语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755340/

相关文章:

algorithm - 给定5个数,只用加乘减法看能不能生成42?

c++ - 如何防止基类的指针指向派生类?

c - C中弹出中间元素

c# - 具有定义大小的特殊队列

c++ - 如何检测析构函数中的堆栈展开

python - 带有生成器的 Python 中的 DFS 算法

algorithm - 如何确定范围列表是否涵盖给定范围?

c++ - 使用二进制搜索查找丢失的数字

java - 重复从字符串中删除子字符串

stack - 如何确定堆栈底部?