peng/functions.py
def _parse_expr(text, ldelim="(", rdelim=")"):
    """Parse mathematical expression using PyParsing."""
    var = pyparsing.Word(pyparsing.alphas + "_", pyparsing.alphanums + "_")
    point = pyparsing.Literal(".")
    exp = pyparsing.CaselessLiteral("E")
    number = pyparsing.Combine(
        pyparsing.Word("+-" + pyparsing.nums, pyparsing.nums)
        + pyparsing.Optional(point + pyparsing.Optional(pyparsing.Word(pyparsing.nums)))
        + pyparsing.Optional(
            exp + pyparsing.Word("+-" + pyparsing.nums, pyparsing.nums)
        )
    )
    atom = var | number
    oplist = [
        (pyparsing.Literal("**"), 2, pyparsing.opAssoc.RIGHT),
        (pyparsing.oneOf("+ - ~"), 1, pyparsing.opAssoc.RIGHT),
        (pyparsing.oneOf("* / // %"), 2, pyparsing.opAssoc.LEFT),
        (pyparsing.oneOf("+ -"), 2, pyparsing.opAssoc.LEFT),
        (pyparsing.oneOf("<< >>"), 2, pyparsing.opAssoc.LEFT),
        (pyparsing.Literal("&"), 2, pyparsing.opAssoc.LEFT),
        (pyparsing.Literal("^"), 2, pyparsing.opAssoc.LEFT),
        (pyparsing.Literal("|"), 2, pyparsing.opAssoc.LEFT),
    ]
    # Get functions
    expr = pyparsing.infixNotation(
        atom, oplist, lpar=pyparsing.Suppress(ldelim), rpar=pyparsing.Suppress(rdelim)
    )
    return expr.parseString(text)[0]
def _parse_expr(text, ldelim="(", rdelim=")"):
    var = pyparsing.Word(pyparsing.alphas + "_", pyparsing.alphanums + "_")
    point = pyparsing.Literal(".")
    exp = pyparsing.CaselessLiteral("E")
    number = pyparsing.Combine(
        pyparsing.Word("+-" + pyparsing.nums, pyparsing.nums)
        + pyparsing.Optional(point + pyparsing.Optional(pyparsing.Word(pyparsing.nums)))
        + pyparsing.Optional(
            exp + pyparsing.Word("+-" + pyparsing.nums, pyparsing.nums)
        )
    )
    atom = var | number
    oplist = [
        (pyparsing.Literal("**"), 2, pyparsing.opAssoc.RIGHT),
        (pyparsing.oneOf("+ - ~"), 1, pyparsing.opAssoc.RIGHT),
        (pyparsing.oneOf("* / // %"), 2, pyparsing.opAssoc.LEFT),
        (pyparsing.oneOf("+ -"), 2, pyparsing.opAssoc.LEFT),
        (pyparsing.oneOf("<< >>"), 2, pyparsing.opAssoc.LEFT),
        (pyparsing.Literal("&"), 2, pyparsing.opAssoc.LEFT),
        (pyparsing.Literal("^"), 2, pyparsing.opAssoc.LEFT),
        (pyparsing.Literal("|"), 2, pyparsing.opAssoc.LEFT),
    ]
    # Get functions
    expr = pyparsing.infixNotation(
        atom, oplist, lpar=pyparsing.Suppress(ldelim), rpar=pyparsing.Suppress(rdelim)
    )
    return expr.parseString(text)[0]
def _parse_expr ( text , ldelim = "(" , rdelim = ")" ) : var = pyparsing . Word ( pyparsing . alphas + "_" , pyparsing . alphanums + "_" ) point = pyparsing . Literal ( "." ) exp = pyparsing . CaselessLiteral ( "E" ) number = pyparsing . Combine ( pyparsing . Word ( "+-" + pyparsing . nums , pyparsing . nums ) + pyparsing . Optional ( point + pyparsing . Optional ( pyparsing . Word ( pyparsing . nums ) ) ) + pyparsing . Optional ( exp + pyparsing . Word ( "+-" + pyparsing . nums , pyparsing . nums ) ) ) atom = var | number oplist = [ ( pyparsing . Literal ( "**" ) , 2 , pyparsing . opAssoc . RIGHT ) , ( pyparsing . oneOf ( "+ - ~" ) , 1 , pyparsing . opAssoc . RIGHT ) , ( pyparsing . oneOf ( "* / // %" ) , 2 , pyparsing . opAssoc . LEFT ) , ( pyparsing . oneOf ( "+ -" ) , 2 , pyparsing . opAssoc . LEFT ) , ( pyparsing . oneOf ( "<< >>" ) , 2 , pyparsing . opAssoc . LEFT ) , ( pyparsing . Literal ( "&" ) , 2 , pyparsing . opAssoc . LEFT ) , ( pyparsing . Literal ( "^" ) , 2 , pyparsing . opAssoc . LEFT ) , ( pyparsing . Literal ( "|" ) , 2 , pyparsing . opAssoc . LEFT ) , ] # Get functions expr = pyparsing . infixNotation ( atom , oplist , lpar = pyparsing . Suppress ( ldelim ) , rpar = pyparsing . Suppress ( rdelim ) ) return expr . parseString ( text ) [ 0 ]
Parse mathematical expression using PyParsing.
Parse mathematical expression using PyParsing .