C#在运行时解析未知的逻辑条件

时间:2011-12-09 03:48:59

标签: c# parsing abstract-syntax-tree

我正在编写一个.NET程序,它对文本文件进行了大量的字符串验证。我想允许用户能够设置验证规则,因此我不必硬编码大量边缘情况。例如,我设想类似下面的内容(大写是下拉中的项目以限制用户操作,引号中的项目是用户编写的):

IF KEY IS "X" AND VALUE IS "Y" RETURN NOTIFICATION

(IF KEY IS "X" OR VALUE IS "Y") AND (IF SECTIONNAME IS "I") REPLACE "Y" WITH "J"

因此,正如您在上面所看到的,我希望能够使用parens对事物进行分组,使用逻辑AND和OR并处理IF语句,这些语句将全部评估为某些True / False值以执行某些操作。我的问题是什么是解析数据的最佳方法,以便我知道要执行的正确操作和正确的分组。通过谷歌似乎也许我想要创建一个抽象的语法树,如果是这样的话,我就无法找到一些简单的例子让我开始。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

我是解析器生成器的忠实粉丝(请参阅我的简历),但它们有时候会有点过分。

对于表达这个简单的(布尔逻辑)和一小组动作(如你所示),递归下降解析器应该做得很好。如果将语义动作编织到解析中,则不需要AST;您可以动态计算布尔方程的结果,并在解析之前使用结果来决定是否应该执行已解析的操作,因为递归下降解析器从左到右工作。因此,您可以将规则存储为文本,只需按需执行,您的用户就可以当场输入。

请参阅this SO answer on how to build a recursive descent parser by hand

答案 1 :(得分:0)

你可以通过创建一个Domain Specific Language在C#中完成这个...基本上你建立了一个设置规则,用于语言的语法是什么样的,允许的语言是什么,以及正确的解析器是为你编写的。