我正在尝试这样做是为.NET中的以下案例编写一个简单的解析器
( [PART3]function1() AND [PART4]function7() ) OR [PART2]function90()
[PART]
表示评估位置,(假设这是一个巨大的文本文件,PART将文本文件分成大块)function()
是我记录的函数,可以通过此查询调用。返回true
或false
True/False
和其他运算符之间的比较,我希望将结果组合起来,并从整个输入中返回一个最终的True或False。在.NET中实现这样的东西的最佳方法是什么,是否有任何简单的库可以让我集成它,或者我只需要编写一个简单的解析器然后自己完成它?
P.S。我找不到这个问题的好标题。
答案 0 :(得分:1)
尝试Irony,虽然还没有为黄金时间做好准备,但它显示了一些承诺。
Irony是一个用于在.NET平台上实现语言的开发工具包。它利用c#语言和.NET Framework 3.5的灵活性和强大功能来实现全新的简化编译器构造技术。 与大多数现有的yacc / lex风格解决方案不同,Irony不会使用以专门的元语言编写的语法规范生成任何扫描程序或解析器代码。在Irony中,目标语言语法使用运算符重载直接在c#中编码,以表达语法结构。 Irony的扫描程序和解析器模块使用编码为c#类的语法来控制解析过程。
答案 1 :(得分:1)
看起来简单的条件,所以在我看来你不需要功能齐全的编译器生产者。我可以建议您查看Reverse Polish Notation,使用它将条件展开到堆栈中,然后使用简单的解释来评估生成的堆栈。