Я пытался разобрать определение функции для языка python с помощью PLY. Я сталкиваюсь с проблемами, связанными с отступом. Например, для оператора for я хотел бы знать, когда заканчивается блок. Я прочитал грамматику Python здесь: http://docs.python.org/2/reference/grammar.html И грамматика для этой части:
for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]
suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT
Я не знаю, как описать токены INDENT и DEDENT с помощью PLY. Я пытался что-то вроде:
def t_indentation(t):
r' |\t'
#some special treatment for the indentation.
Но похоже, что PLY считает, что регулярные выражения с пробелами соответствуют пустой строке и не создают лексер... Даже если бы мне удалось получить токен INDENT, я не уверен, как получить токен DEDENT...
Есть ли способ сделать это с помощью PLY?