您可以推荐哪种Python工具来解析编程语言?它应该允许源内语言语法的可读表示,并且它应该能够扩展到复杂的语言(具有像Python本身那样复杂的语法).
当我搜索时,我主要找到pyparsing,我将评估,但当然我对其他替代品感兴趣.
编辑:奖励点,如果它附带有良好的错误报告和附加到语法树元素的源代码位置.
好的,所以我问过一些关于这个项目的小问题,但我对我想出的设计仍然没有多少信心,所以我会在更广泛的范围内提出一个问题.
我正在解析课程目录的先决条件描述.描述几乎总是遵循某种形式,这使我认为我可以解析其中的大多数.
从文本中,我想生成一个关于课程必备关系的图表.(在我解析数据之后,那部分会很简单.)
一些样本输入和输出:
"CS 2110" => ("CS", 2110) # 0
"CS 2110 and INFO 3300" => [("CS", 2110), ("INFO", 3300)] # 1
"CS 2110, INFO 3300" => [("CS", 2110), ("INFO", 3300)] # 1
"CS 2110, 3300, 3140" => [("CS", 2110), ("CS", 3300), ("CS", 3140)] # 1
"CS 2110 or INFO 3300" => [[("CS", 2110)], [("INFO", 3300)]] # 2
"MATH 2210, 2230, 2310, or 2940" => [[("MATH", 2210), ("MATH", 2230), ("MATH", 2310)], [("MATH", 2940)]] # 3
Run Code Online (Sandbox Code Playgroud)
如果整个描述只是一个过程,则直接输出.
如果课程是连接的("和"),则它们都输出在同一列表中
如果课程脱离("或"),则它们位于不同的列表中
在这里,我们有"和"和"或". …
我正在尝试读取模糊纯文本规则并将参数传递给 SciKit-Fuzzy 函数调用以创建模糊规则。例如,如果我在此文本规则中阅读:
IF service IS poor OR food IS rancid THEN tip IS cheap
Run Code Online (Sandbox Code Playgroud)
然后函数调用将是:
ctrl.Rule(service ['poor'] | food ['rancid '], tip ['cheap'])
Run Code Online (Sandbox Code Playgroud)
如果文本规则是:
IF service IS good THEN tip IS average;
Run Code Online (Sandbox Code Playgroud)
然后函数调用将是:
ctrl.Rule(service ['good '] , tip ['average'])
Run Code Online (Sandbox Code Playgroud)
由于每个规则可以有无限数量的输入变量,例如用户还可以说:
IF service IS good AND food IS good AND mood IS happy THEN tip IS high
Run Code Online (Sandbox Code Playgroud)
其中包含 3 个输入变量service['good']、food['good']、和mood['happy']和 1 个输出变量tip['high']。我想不出一种方法来自动读取文本规则并将其转换为函数调用,您有什么想法或建议来实现这个目标吗?任何帮助将不胜感激。谢谢。