Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 21, 2013 17:17:05

asdf404
Зарегистрирован: 2013-09-15
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

PLY. Проблема с парсером

Доброго времени суток. Пишу очередной ненужный ЯП (чисто академический интерес) с помощью PLY и столкнулся с проблемой на этапе работы парсера. Правила, вроде как, записаны правильно, но парсер воспринимает только первое выражение, а остальные считает за ошибку.
Код парсера тут
Он нормально воспринимает такой код:

a = 1 + 2
но ругается, если добавить ещё одно выражение:
a = 1 + 2
b = 3 + 4

Надеюсь на вашу помощь.

Отредактировано asdf404 (Сен. 21, 2013 17:18:58)

Офлайн

#2 Сен. 22, 2013 09:09:11

asdf404
Зарегистрирован: 2013-09-15
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

PLY. Проблема с парсером

Эту проблему почти решил. Оказывается, я забыл вернуть токен 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) и игнорировать его в остальных случаях.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version