我正在分析几个输出,这些文件有两个不同的头:
header1 = " MO EIGENVALUES, MO OCCUPATION NUMBERS, AND CARTESIAN MO EIGENVECTORS AFTER SCF STEP -1"
header2 = "MO EIGENVALUES, MO OCCUPATION NUMBERS, AND SPHERICAL MO EIGENVECTORS AFTER SCF STEP -1"
基于结果在笛卡尔或球面坐标中的声明,我想应用相应的解析器。你知道吗
在Haskell中,我可以编写一个解析器,根据前面的结果决定下一步要做什么,如下所示
myparser = do
xs <- someParser
if xs == "foo"
then parser1
else parser2
如何在python中使用pyparsing创建相同的函数?你知道吗
注意:我不知道输出是在笛卡尔坐标系还是球坐标系下。你知道吗
下面是一个应该有效的解决方案的概要。其思想是实现一个新的解析器类,该类运行一个解析器,并根据返回的令牌在两个备选方案之间进行选择。你知道吗
if ...toks...
是您放置切换逻辑的地方。你知道吗您还需要实现
__str__
方法,可能还需要实现checkRecursion
方法。你知道吗有一些细节需要弄清楚。。。可能
exprs[0]
是“if”解析器,而不是exprs[1]
。你知道吗用
IfThenElse(p, q, r)
实例化这个解析器应该与And
解析器具有相同的语法。你知道吗我想在我看来,一个人只需写下:
如果标题行与“header1”匹配,则pyparsing将继续,并使用parser1进行其余的解析。否则它将尝试匹配'header2',如果匹配,将使用parser2。你知道吗
使用动态解析器元素和解析操作肯定可以获得更多的异国情调。看起来是这样的:
注意使用“shift into”操作符<;<;=通过插入前面定义的Forward()来定义解析器的变量部分。你知道吗
但这更容易理解,我认为:
相关问题 更多 >
编程相关推荐