-1
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 func 进行编码的正常示例或解释我的错误。

4

1 回答 1

1

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

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( '' ))
于 2021-02-26T01:33:12.033 回答