Оператор суммирования Lexing и целое число со знаком с PLY Python - PullRequest
2 голосов
/ 23 ноября 2011

Как я могу построить свое необработанное выражение, чтобы различать оператор суммы и целое число со знаком?Я использую PLY Python.

Это, к сожалению, не сработало:

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

1 Ответ

2 голосов
/ 17 сентября 2012

Один из способов думать об этом - вместо того, чтобы пытаться различить цель + в лексизме, - это ждать анализа (где мы определяем значение). Так что держите:

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) .

...