0

我正在尝试这样做是在.NET 中为以下情况编写一个简单的解析器

( [PART3]function1() AND [PART4]function7() ) OR [PART2]function90() 
  • [PART]表示评估位置,(假设这是一个巨大的文本文件,PART 将文本文件分成大块)
  • function()s 是我记录的函数,可以通过这个查询调用。退货truefalse
  • 基于此True/False运算符和其他运算符,我想组合结果并从整个输入中返回一个最终的 True 或 False。

在 .NET 中实现这样的事情的最佳方法是什么,是否有任何简单的库可以让我集成它,或者我应该只编写一个简单的解析器然后自己做吗?

PS我找不到这个问题的好标题。

4

2 回答 2

1

试试Irony,虽然还没有准备好迎接黄金时段,但它显示出一些希望。

Irony 是一个在 .NET 平台上实现语言的开发工具包。它利用 c# 语言和 .NET Framework 3.5 的灵活性和强大功能来实现一种全新的、流线型的编译器构造技术。与大多数现有的 yacc/lex 风格的解决方案不同,Irony 不使用任何扫描器或解析器代码生成来自以专门的元语言编写的语法规范。在 Irony 中,目标语言语法直接用 C# 编码,使用运算符重载来表达语法结构。Irony 的扫描器和解析器模块使用编码为 c# 类的语法来控制解析过程。

于 2009-06-28T09:18:05.377 回答
1

看起来很简单的条件,所以在我看来你不需要全功能的编译器生产者。我可以建议您查看Reverse Polish Notation,使用它将您的条件解包到堆栈中,然后使用简单的解释来评估结果堆栈。

于 2009-06-28T10:10:25.753 回答