Re: Aufgaben und Übungen,

/*
 * expr ::= term | term + expr
 * term ::= factor | factor * term
 * factor ::= (expr) | num
 * num ::= 0..9
 */

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

function gettoken () {
    return s[i++];
}

function tokenback () {
    i--;
}

function expr () {
    var x;
    var y = 0;

    x = term ();
    if (gettoken () == '+')
        y = expr ();
    else
        tokenback ();

return x+y;
}

function term () {
    var x;
    var y = 1;

    x = factor ();
    if (gettoken () == '*')
        y = term ();
    else
        tokenback ();

return x*y;
}

function factor () {
    var s = gettoken ();
    var x = parseInt (s);

    if (s == '(') {
        x = expr ();
        if (gettoken () != ')')
            console.log ("Error");
    }
    else if ((x >= 0) \&amp;\&amp; (x <= 9));
    else
        console.log ("Error");
return x;
}

console.log(expr());
console.log(((4+5)*3+2)*8);

Muss ich noch dran arbeiten

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