我用python编写了一个简单的命题逻辑公式解析器,它使用正则表达式re模块和lex/yacc模块进行词法分析/解析。最初,我的代码可以将含义选为->;,但添加逻辑等价性(<;->;)会导致编译表达式出现问题
IMPLICATION = re.compile('[\s]*\-\>[\s]*')
EQUIVALENCE = re.compile('[\s]*\<\-\>[\s]*')
...
elif self.IMPLICATION.search(formula[0].strip()):
...
elif self.EQUIVALENCE.search(formula[0].strip()):
...
我最初尝试将[^<;]添加到-gt;的前面,以使其忽略等价实例,但这只是使它根本不接受任何隐含实例。欢迎任何可能的帮助:)
我认为你可以简单地解决这个问题,首先对检查进行排序以匹配等价物,然后再匹配含义。然而,这似乎是有效的:
据我所知,您的正则表达式相当于以下内容:
在编写本文时,还需要匹配}不需要在这些正则表达式中转义。在
->
和<->
文本之前的零个或多个空白字符。但是您没有捕获空间,所以指定“匹配是否存在空间”是没有用的。另外,请注意,-
和{我看你有两个选择。第一个是确保
^{pr2}$IMPLICATION
与EQUIVALENCE
不匹配相同的字符串另一个选择是使用maximal munch method;即,匹配所有正则表达式,并选择最长的匹配。这将通过赋予等价比隐含更高的优先级来解决歧义。在
相关问题 更多 >
编程相关推荐