Can';t在python中解析EBNF公式

Can';t在python中解析EBNF公式,python,parsing,ebnf,ebnf-syntactic-exception,Python,Parsing,Ebnf,Ebnf Syntactic Exception,请帮助我找到使用EBNF func进行编码的正常示例或解释我的错误。通常,我不会回答明显是家庭作业问题的问题,但在这种情况下,我认为您太离题了,我们将浪费太多时间引导您重新对齐。看看你是否可以用这个来找出你应该如何解决这个问题 import argparse from parglare import Grammar from parglare import Parser formula = r""" Formula : Number | (Formula Sign


请帮助我找到使用EBNF func进行编码的正常示例或解释我的错误。

通常,我不会回答明显是家庭作业问题的问题,但在这种情况下,我认为您太离题了,我们将浪费太多时间引导您重新对齐。看看你是否可以用这个来找出你应该如何解决这个问题

import argparse
from parglare import Grammar
from parglare import Parser

formula = r"""
Formula : Number | (Formula Sign Formula)
Number  : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
Sign    : '+' | '-'
"""

grammar = Grammar.from_string(formula)
parser = Parser(grammar, build_tree=True, prefer_shifts=True)
parser = argparse.ArgumentParser()

parser.add_argument('expression')

args = parser.parse_args()

expression = args.expression

print(parser.parse_args(expression))

请提供预期的(MRE)。我们应该能够复制和粘贴一个连续的代码块,执行该文件,并再现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和期望的输出来测试我们的建议。不接受场外链接和文本图像;我们需要你的问题是独立的,符合本网站的目的。请重复和从。询问建议或参考资料被明确列为离题;你的示例请求不属于这里。当您正确地记录您的问题时,我们也许可以帮助您解决错误。这显然不是您正在运行的代码。错误显示为“mask>=:”,此处不存在。创建parglar.Parser后,立即用argparse.ArgumentParser覆盖它。你是不是应该用眩光?或者你应该自己用EBNF作为指南手工进行解析吗?顺便说一句,使用argparse的建议完全是假的。您只有一个参数。只需导入sys/
expression=sys.argv[1]
。我应该使用argparse,这对我来说就是导师
import sys

def process( accum, op, number ):
    if op == '+':
        return accum + number
    elif op == '-':
        return accum - number
    elif op == '0':
        return number

def parse(expression):
    if not expression:
        return (False, None)
    accum = 0
    number = 0
    pending = '0'
    for c in expression:
        if c.isdigit():
            if number is None:
                number = 0
            number = number * 10 + int(c)
        elif c in "+-":
            if number is None:
                return False, None
            accum = process( accum, pending, number )
            pending = c
            number = None
        else:
            return False, None
    return True, process( accum, pending, number )

if len(sys.argv) > 1:
    print(parse( sys.argv[1] ) )
else:
    print(parse( "1+2+4-2+5-1" ))
    print(parse( "123" ))
    print(parse( "hello+12" ))
    print(parse( "2++12-3" ))
    print(parse( '' ))