- 1
https://github.com/ruby/ruby/blob/trunk/parse.y
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
https://github.com/ruby/ruby/blob/trunk/parse.y
Как распарсить Руби код.
Зато в Руби парсинг интерполяции заебашили в лексере, и поэтому можно писать "#{foo("bar")}", ну или %Q[#{foo("bar")}] если редактор вдруг не может справиться с подсветкой синтаксиса.
Нахер они это придумали...
это мне больше понравилось. выхлоп gperf про который ранее я даже и не слышал.
ЗЫ а про лексеры/парсеры, после перла меня уже ничего не удивит. .у там кот наплакал (и граматика весьма регулярная) а вот лексер...
https://github.com/Perl/perl5/blob/blead/toke.c
Perl_yylex() - писан на внутренней либе перла (или как говорят перловцы: "перл написан по большей части на перле").
А что там особо интересного? Про gperf раньше слышал, но использовать не доводилось.
я раньше видел генератор, который делал пачку if'ов, которые сравнивали отдельно взятые буквы в подсчитаных позициях, что бы минимальным кол-вом сравнений (а ля дихотомия) распознать слово из словаря. поэтому нечто подобное и ожидал.
Но даже при том, что Як сгенерирует больше говна из этого файла, разница будет не особенно заметна потому что 99% из этого файла он оставит как есть.
/*%
$$ = dispatch4(rescue,
escape_Qundef($2),
escape_Qundef($3),
escape_Qundef($5),
escape_Qundef($6));
%*/
?