从语法生成分析器代码以验证字符串



我有一个语法,我想创建一个程序,将这个语法作为参数,并生成一个输出代码(C,Java,Python,...)。因此,当我们编译/运行生成的代码并向其传递字符串/短语时,它应该检查该字符串是否通过语法验证。

什么是正确的方法?

更新:添加语法示例

S  -> id ':=' E
E  -> T A
A  -> '+' T A | empty
T  -> F B
B  -> '*' F B | empty
F  -> '(' E ')' | id | number

这不是一项微不足道的任务,甚至没有一个正确的解决方案。 我建议您查看应该准备作业的班级的讲义,并使用那里介绍的技术。

如果你的语法是上下文无关的,你可以(在将其转换为乔姆斯基范式后)使用Cocke-Younger-Kasami算法来检查它是否可以产生一个给定的单词。 该算法易于实现(不到一个充满Python代码的屏幕),但需要立方体时间。 它主要用于理论计算机科学。

实际的编译器使用更快的算法,但它们对语法提出了额外的要求。 看看你的讲座中介绍了什么。 如果你想知道它在现实世界中是如何工作的,你可以研究一个现有的解析器生成器,如GNU Bison。 它是免费软件,因此您可以自由地研究其源代码。

祝你好运!

最新更新