2010-06-15 6 views
6

Я использовал antlr и javacc/freecc какое-то время. Теперь мне нужно написать кучу парсеров с использованием грамматик antlr, но такие парсеры должны быть написаны в ruby ​​lang.Какой лучший аналог ANTLR для создания парсеров в рубине?

Я googled но ничего не найдено. Есть ли генератор синтаксического анализатора ruby, который принимает грамматики antlr и создает парсер? Если их много, что лучше, по вашему мнению?

ТИА Paolo

ответ

1

Вы также можете сгенерировать парсер с ANTLR для Java или C и вызвать его из своей программы Ruby с помощью JRuby или FFI.

Это также должно дать вам повышение производительности, которое может быть большим преимуществом, если у вас есть масса ввода для синтаксического анализа.

+0

ahe, это именно то, что я выбираю. Я активировал новый проект (http://github.com/thesp0nge/mirage) относительно всего, что касается анализа исходного кода. Я напишу мираж в C, используя antlr, и тогда я позвоню ему из Ruby. Для всех, кого это интересует, это для основной перезаписи для проекта Owasp Orizon, статического анализатора исходного кода, который я пишу (http://github.com/thesp0nge/owasp-orizon/) –

3

Почему бы не использовать ANTLR Руби: http://www.antlr.org/wiki/display/ANTLR3/Antlr3RubyTarget (http://split-s.blogspot.com/2005/12/antlr-for-ruby.html)

Существует также некоторые бета здесь: http://rubyforge.org/projects/antlr3/

+1

Позор на меня. Сначала я не проверял правильное место ... сообщество драгоценных камней. Большое вам спасибо :-) –

+1

Обратите внимание, что цель Ruby, поставляемая с ANTLR 3.4, довольно сломана. Если есть какие-либо проблемы с камнем, главный редактор проекта на GitHub, похоже, работает нормально: https://github.com/ohboyohboyohboy/antlr3 –

7
  1. Вы можете уйти легко с помощью JRuby и хранение ваши ANTLR парсеров в java.
  2. Если для вашей работы достаточно PEGs, treetop и выше citrus являются обычными инструментами, используемыми rubyists.
  3. Другие синтаксические анализаторы, которые я копал при исследовании для проекта: peggy, Kanocc, Racc.

Для моего проекта я выбрал treetop (цитрусовые еще не родились).

+0

Большое вам спасибо за ваши предложения :-) –

+2

Новый классный малыш [Parslet] (http://kschiess.github.com/parslet/index.html) – clyfe