pyPeg2 递归语法规则

pyPeg2 recursive grammar rules

提问人:bahab 提问时间:8/7/2023 最后编辑:bahab 更新时间:8/7/2023 访问量:36

问:

我正在尝试制作一个命题逻辑解析器,它可以接受像'and(P(),not P())'这样的输入,并将其转换为.我正在使用 pyPEG2 库在 python 中执行此操作。下面是我的代码的样子:And(Predicate(P),Negation(Predicate(P)))

class Formula(List):
    pass

# Predicate class
class Predicate:
    grammar = attr('name', predicate_name_regex) , "(" , attr('terms', csl(Formula)) , ")"

# Variable class
class Variable:
    grammar = attr('name', function_name_regex)

# And class
class AndFormula:
    grammar = K("and(") , attr('left', Formula) , "," , attr('right', Formula) , ")"

# similar prop. logic connectives and terms... etc

# Formula class

class Formula(List):
    grammar = [AndFormula,Predicate,Variable] #plus all the other grammars...


# Parsing function
def parse_formula(input_text):
    return parse(input_text, Formula)

# Example usage:
input_text = "and(a,b)"
parsed_formula = parse_formula(input_text)
print(input_text)
print(f'{parsed_formula}:{parsed_formula.__dict__}')

现在我得到的错误是 ,据我所知,这只是意味着解析器无法识别输入文本中的关键字。但是,如果我的输入文本只是(只是一个变量),那就没问题了。因此,问题似乎在于 和 have 在它们的定义中,直到后来才真正定义。SyntaxError: expecting Keyword('and(')input_text = 'x'PredicateAndFormulaFormulaFormula

或者,我可能完全不了解这个问题,但无论哪种方式,任何帮助都将不胜感激!谢谢!

Python 解析 语法

评论


答: 暂无答案