Я пытаюсь использовать Treetop для анализа файла ERB. Мне нужно иметь возможность обрабатывать строки, подобные следующим:
<% ruby_code_here %>
<%= other_ruby_code %>
Поскольку Treetop написан на Ruby, а вы пишете грамматики Treetop на Ruby, в Treetop уже есть какой-то способ сказать «эй, ищи здесь код Ruby и дай мне его разбивку» без необходимости писать отдельно правила для обработки всех частей языка Ruby? Я ищу способ, в моем .treetop
файле грамматики, что-то вроде:
rule erb_tag
"<%" ruby_code "%>" {
def content
...
end
}
end
Где ruby_code
обрабатывается некоторыми правилами, которые предоставляет Treetop.
Редактировать: кто-то еще проанализировал ERB с помощью Ruby-lex, но я получил ошибки, пытаясь воспроизвести то, что он сделал. Программа rlex не создала полный класс при создании класса синтаксического анализатора.
Редактировать: верно, так что вы много удручаете, но спасибо за информацию. :) Для моего магистерского проекта я пишу генератор тестовых примеров, который должен работать с ERB в качестве входных данных. К счастью, для моих целей мне нужно только распознать несколько вещей в коде ERB, таких как if
операторы и другие условные выражения, а также циклы. Я думаю, что могу придумать грамматику Treetop, чтобы соответствовать этому, с оговоркой, что она не завершена для Ruby.