我有一个以文本形式接收输入的程序,例如:
IF (A.4.1-1/1 OR A.4.1-1/2) AND A.4.4-1/9 AND (A.4.4-1/12 OR A.4.4-1/13 OR A.4.4-1/14 OR A.4.4-1/15) THEN R ELSE N/A
其中A.4.1-1/1
等是值为TRUE or FALSE
的变量。到目前为止,我已将文本解析为上述示例的逻辑部分我有一个如下所示的列表:
['IF', '(', 'A.4.1-1/1', 'OR', 'A.4.1-1/2', ')', 'AND', 'A.4.4-1/9', 'AND', '(', 'A.4.4-1/12', 'OR', 'A.4.4-1/13', 'OR', 'A.4.4-1/14', 'OR', 'A.4.4-1/15', ')', 'THEN', 'R', 'ELSE', 'N/A']
我只是想知道是否有可能实际执行此列表中的逻辑,例如将所有这些组合到rquired python语句中并提供结果。我不确定是否开始我已经阅读过一些我应该使用自顶向下解析器的网站?
答案 0 :(得分:6)
这听起来像是Pyparsing的任务:
pyparsing模块是另一种选择 创建和执行的方法 简单的语法,与传统的语法相比 lex / yacc方法,或使用 常用表达。 pyparsing module提供了一个类库 客户端代码用于构造 语法直接在Python代码中。
您将能够快速定义语法(而不是使用正则表达式)和特定的解析操作。我在300行代码中使用Pyparsing构建了非常丰富的迷你语言。
答案 1 :(得分:1)
我不是Python人,但我使用JavaCC在Java中做过类似的事情。您要做的是为您的语言编写grammar(格式为EBNF,但这取决于解析器生成器),然后使用JavaCC等程序生成解析器它会给你一个更方便操作的parse tree。
您应该能够找到许多有用的示例,因为您输入的语法看起来并不太常见(布尔运算符,带括号的表达式和if-then-else语句可能是最常见的用例之一)这一点)。
您可能会发现其中一个Python库listed on this page很有用。