2011-11-22 66 views
1

如何構建我的原始表達式來區分求和運算符和有符號整數?我正在使用PLY Python。Lexing求和運算符和帶符號整數的Python Python

此,不幸的是,沒有工作:思考這個

t_sum=r'\+' 
def t_integer(token): 
    r'[-+]?\d+' 
+0

這裏的提示(-ish),加號_sign_是一元運算符。此外,還有一個二元運算符。 –

+0

感謝您的提示,但仍不知道如何去做。 – Academia

回答

2

一種方式,而不是試圖區分+目的的詞法,是要等到解析(當我們確定的含義)。因此,保持:

t_PLUS = r'\+' 
t_MINUS = r'\-' 
def t_INTEGER(token): 
    r'\d+' 
    return int(token) 

,並定義語法:

number -> number PLUS number   #sum, binary operator 
number -> number MINUS number 
number -> PLUS number     #signed integer, unary operator 
number -> MINUS number     
number -> INTEGER 

#By writing each as a parse functions like... 
def p_number_ADD(p): 
    "number : number PLUS number" 
    p[0] = p[1]+p[2] 

注:這確實允許以下行爲+-+2 = +(-(+2)) = -2(如Python中看到的)