Эту проблему почти
решил. Оказывается, я забыл вернуть токен NEWLINE в определении.
Теперь беда в другом, парсер спотыкается на объявлении функции вида
Правило записано так:
def p_block(self, p):
"""
block : DO block_body END
"""
def p_block_body(self, p):
"""
block_body : statements
"""
def p_function_definition(self, p):
"""
function_definition : NAME NAME arguments_definition block
"""
Первые два токена NAME — это возвращаемый тип (int в примере) и имя функции соответственно, arguments_definition — список аргументов функции, например “(int a, bool b)”.
Пишет мол Syntax error at “a”, но при записи объявления в одну строку, всё нормально. Не могу понять, как объяснить ему (парсеру), что токен NEWLINE нужно трактовать только как разделитель выражений (statement) и игнорировать его в остальных случаях.