Какой интерфейс я могу использовать с RPython для реализации языка? - PullRequest
3 голосов
/ 15 ноября 2011

Я искал примеры реализации языка с помощью цепочки инструментов RPython, но пока я смог найти только один - этот , в котором автор пишет простой БФ переводчик. Поскольку грамматика очень проста, ему не нужно использовать генератор синтаксического анализатора / лексера. Есть ли интерфейс, поддерживающий разработку языка в RPython?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Мне неизвестен какой-либо общий лексер или генератор парсеров, специально предназначенный для RPython.Некоторые с выходом Python могут работать, но я бы не стал на это ставить.Однако в rlib.parsing есть набор инструментов для разбора.Это кажется вполне пригодным для использования.OTOH, в документации есть предупреждение: по сообщениям, оно все еще находится в разработке, экспериментально и пока используется только для интерпретатора Prolog.

В качестве альтернативы, вы можете написать интерфейс вручную.Предоставленные Lexer могут быть раздражающими и неестественными (вы можете извлечь вспомогательные модули для DFA, используемых реализацией Python).Но парсеры - это просто, если вы знаете правильные алгоритмы.Я большой поклонник "анализаторов приоритетов операторов сверху вниз", также называемых "синтаксические анализаторы Pratt", которые достаточно просты (рекурсивный спуск), но делают все проблемы с синтаксическим анализом выражений (вложенность, приоритет, ассоциативность и т. Д.) Быстрыми.О них удручающе мало информации, но мне было достаточно нескольких постов в блоге:

  • Один за Крокфорд (хотя я бы не рекомендовал это, он выбрасывает много не связанных между собойзаполняет синтаксический анализатор и затемняет его),
  • еще один на effbot.org (использует Python),
  • и третий, к сожалению, даже менее известныйпарень, который сам разрабатывает язык, Роберт Нистром .
1 голос
/ 08 апреля 2015

У Алекса Гейнора перенесено Отличный Дэвид Бизли PLY на RPython.Его документация довольно хорошая, и он даже рассказал о том, как использовать ее для реализации интерпретатора на PyCon US 2013.

...