提问人:bahab 提问时间:8/7/2023 最后编辑:bahab 更新时间:8/7/2023 访问量:36
pyPeg2 递归语法规则
pyPeg2 recursive grammar rules
问:
我正在尝试制作一个命题逻辑解析器,它可以接受像'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'
Predicate
AndFormula
Formula
Formula
或者,我可能完全不了解这个问题,但无论哪种方式,任何帮助都将不胜感激!谢谢!
答: 暂无答案
上一个:ANTLR4 规则开头的可选符号
下一个:使用通用 SQL 方言捕获组
评论