在Java中验证给定Context Free Grammar的字符串

时间:2013-03-23 23:52:25

标签: java parsing computer-science context-free-grammar formal-languages

有人如何验证字符串是否是无上下文语法的一部分?不只是虚拟,而是为它构建算法?

使用诸如

之类的规则给出无上下文语法
  • V-> V1V2
  • v1-> 1 | 1V1
  • V2-> 2 | 2V2

很明显,这是语言1 ^ n 2 ^ n。但是你将如何使用算法来验证它是否真的存在。我想在java中完成这个。

1 个答案:

答案 0 :(得分:7)

您可能希望查看Earley's algorithmCYK algorithm,这两种算法用于决定字符串是否由无上下文语法生成。对于任何长度为n的字符串,无论语法中的生成规则如何,Earley的算法都会在时间O(n 3 )中运行(尽管big-O表示法中的常量项取决于语法),而CYK算法要求首先将语法转换为Chomsky normal form以保证O(n 3 )运行时。

希望这有帮助!