有人如何验证字符串是否是无上下文语法的一部分?不只是虚拟,而是为它构建算法?
使用诸如
之类的规则给出无上下文语法很明显,这是语言1 ^ n 2 ^ n。但是你将如何使用算法来验证它是否真的存在。我想在java中完成这个。
答案 0 :(得分:7)
您可能希望查看Earley's algorithm或CYK algorithm,这两种算法用于决定字符串是否由无上下文语法生成。对于任何长度为n的字符串,无论语法中的生成规则如何,Earley的算法都会在时间O(n 3 )中运行(尽管big-O表示法中的常量项取决于语法),而CYK算法要求首先将语法转换为Chomsky normal form以保证O(n 3 )运行时。
希望这有帮助!