Найти - Пользователи
Полная версия: PLY. Проблема с парсером
Начало » Python для новичков » PLY. Проблема с парсером
1
asdf404
Доброго времени суток. Пишу очередной ненужный ЯП (чисто академический интерес) с помощью PLY и столкнулся с проблемой на этапе работы парсера. Правила, вроде как, записаны правильно, но парсер воспринимает только первое выражение, а остальные считает за ошибку.
Код парсера тут
Он нормально воспринимает такой код:
a = 1 + 2
но ругается, если добавить ещё одно выражение:
a = 1 + 2
b = 3 + 4

Надеюсь на вашу помощь.
asdf404
Эту проблему почти решил. Оказывается, я забыл вернуть токен NEWLINE в определении.
Теперь беда в другом, парсер спотыкается на объявлении функции вида
int main() do
  a = 1
end
Правило записано так:
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) и игнорировать его в остальных случаях.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB