2011-10-06 64 views
2

我想用一個簡單的表達式解析器的Python PLY,我無法讓它工作。該代碼是available at bitbucket,但有問題的部分是:Python PLY - 這個語法錯了嗎?

首先,定義:

def p_expr_minus(p): 
    '''expr : expr MINUS term''' 
    p[0] = p[1]-p[3] 

def p_term_divide(p): 
    '''term : term DIVIDE factor''' 
    p[0] = p[1]/p[3] 

似乎倒,給我拿結果:3-9 = 6和2/8 = 4。

其次,括號表達式factor: (expr)不起作用。尤其是零件:

def p_factor_brackets(p): 
    '''factor : OBRACKET expr CBRACKET''' 
    p[0] = p[2] 

無法正常工作。解析表達式如(9+7)提出了:

TypeError: unknown text at ')' 

這些錯誤的來源是什麼?

回答

2

解析器是好的,但你正在做一些愚蠢的事在你main()方法:

def main(): 
    data = "3*4+5*6-10" 
    data = raw_input() 
    print yacc.parse(data[::-1]) 

你是餵養與逆轉串解析器:data[::-1]!難怪(9+7)給出了錯誤,解析器將其視爲)7+9(。只要通過真實data,你會沒事的。

+0

愚蠢是正確的詞:)謝謝你的答案。 –