Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 1142aab15abbf19b571c813fc39a9643 > files > 16

python-dparser-1.15-1mdv2009.1.i586.rpm

from dparser import Parser

def d_add(t):
    '''add : add '+' mul
           | mul'''
    if(len(t) == 1):
        return t[0]
    return t[0] + t[2]

def d_mul(t):
    '''mul : mul '*' exp
           | exp'''
    if(len(t) == 1):
        return t[0]
    return t[0]*t[2]

def d_exp(t):
    '''exp : number1
           | number2
           | '(' add ')' '''
    if(len(t) == 1):
        return int(t[0])
    return t[1]

def d_number1(t):
    '''number1 : number'''
    return t[0]

def d_number2(t):
    '''number2 : number'''
    return t[0]

def d_number(t):
    '''number : "[0-9]+"'''
    return t[0]

def ambiguity_func(v):
    return v[0]

def d_whitespace(t, spec):
    "whitespace : ' '*"
    
if Parser().parse('1  +2* (3+ 4+5)', ambiguity_fn = ambiguity_func, print_debug_info=0) != 25:
    print 'fail'