无法解析 python 中的 EBNF 公式


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))

回溯

我需要做的任务

请帮我找到用EBNF函数编码的正常示例或解释我的错误。

通常情况下,我不会回答明显是家庭作业的问题,但在这种情况下,我认为你离目标太远了,我们会浪费太多时间来引导你回到正轨。看看你是否可以用它来找出你应该如何处理这个问题。

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( '' ))

最新更新