Re: JavaScript, Python

# expr ::= term | term + expr
# term ::= factor | factor * term
# factor ::= (expr) | num

s="((4+5)*3+2)*8"
i=0

def gettoken ():
    global i
    j=i

    print(s[i])

    if i < len(s)-1:
        i=i+1
        return s[j]
    else:
        return 'e'

def tokenback ():
    global i
    i = i-1

def expr ():
    y = 0

    x = term ()

    p = gettoken ()
    if p == '+':
        y = expr ()
    elif p == 'e':
        return x
    else:
        tokenback ()
    return x+y

def term ():
    y = 1

    x = factor ()

    if x == -1:
        return 1

    p = gettoken ()
    if p == '*':
        y = term ()
    elif p == 'e':
        return x
    else:
        tokenback ()
    return x*y

def factor ():
    p = gettoken ()
    if p.isdigit():
        x = int(p)
    elif p == '(':
        x = expr ()
        if gettoken () != ')':
            print ("error - Bracket not closed");
            exit ()
    elif p == 'e':
        return -1
    else:
        print ("error - invalid character")
        exit ()
    return x

print(expr())