Доброго всем времени суток!
Подскажите, где почерпнуть информации об таком замечательном инструменте, как YACC. Сегодня на работе скомпилировал пример с сайта Solotony - простенький калькулятор. Компилил правда из Quincy2005 под win32, но это не суть важно. Так я понял это получается не yet another compiler compiler, а собственно интерпретатор! Хотя это тоже не плохо. Вопрос собственно в другом. Инфы по этой программе на русском мало. Либо очень поверхностно (на одной странице), либо чрезчур академично. Есть ли что-нибудь среднее, с примерами? Желательно пример чего-нибудь наподобие basic интерпретатора. Чтоб хоть посмотреть как это делается!
С уважением, Дмитрий.
Начала работы с YACC
Модератор: Модераторы разделов
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Начала работы с YACC
$ info bison
достаточно подробная документация по википедия://GNU bison
достаточно подробная документация по википедия://GNU bison
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Начала работы с YACC
demetrius2003 писал(а): ↑19.04.2011 21:01Подскажите, где почерпнуть информации об таком замечательном инструменте, как YACC.
Он уже очень давно не yacc, а bison, и самая лучшая документация по нему - info bison
demetrius2003 писал(а): ↑19.04.2011 21:01Есть ли что-нибудь среднее, с примерами? Желательно пример чего-нибудь наподобие basic интерпретатора. Чтоб хоть посмотреть как это делается!
На хабре есть цикл статей по написанию простенького компилятора (там сначала интерпретатор, потом уже компиляция).
Если особо надо и не будете ругать за не особо качественный код (писалось по ходу ознакомления с bison, flex, llvm, архитектура переделывалась совсем несколько раз, писалось исключительно для собственного развития и сначала вообще не это планировалось - в результате код не очень красивый и без комментариев), то могу скинуть код компилятора маленького подмножества паскаля (flex+bison+llvm).
-
- Сообщения: 59
Re: Начала работы с YACC
Я скачал Berkley Yacc, потому как на работе Windows. Т. е. Bison полностью аналогичен? В том смысле, проект переписывать не придётся? За исходники в любом виде буду признателен. На хабре постараюсь поискать. За наводку спасибо!
-
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Начала работы с YACC
Как и обещал, выкладываю архив с исходниками.
Бинарники не отправляю, т.к. LLVM линкуется статически и получается бинарник размером 2 Мб. Если особо нужно, могу потом и бинарники выложить, сейчас интернет очень медленно работает.
Как собирать:
Если Debian, то просто ставим lex, bison, llvm-2.7-dev и делаем make
Если другой дистрибутив - ставим все то же, заменяем в Makefile llvm-config-2.7 на llvm-config (или как он в вашем дистрибутиве) и делаем make
В bin/Debug появляется собранный бинарник.
Запускаете этот самый бинарник, указывая в LD_LIBRARY_PATH путь до librtl.so (в корне проекта). Вводите код и жмете Ctrl+D. Он компилирует, выводит LLVM IR, потом выполняет.
Пример кода:
Если в коде ошибки, оно пока сегфолтится.
Бинарники не отправляю, т.к. LLVM линкуется статически и получается бинарник размером 2 Мб. Если особо нужно, могу потом и бинарники выложить, сейчас интернет очень медленно работает.
Как собирать:
Если Debian, то просто ставим lex, bison, llvm-2.7-dev и делаем make
Если другой дистрибутив - ставим все то же, заменяем в Makefile llvm-config-2.7 на llvm-config (или как он в вашем дистрибутиве) и делаем make
В bin/Debug появляется собранный бинарник.
Запускаете этот самый бинарник, указывая в LD_LIBRARY_PATH путь до librtl.so (в корне проекта). Вводите код и жмете Ctrl+D. Он компилирует, выводит LLVM IR, потом выполняет.
Пример кода:
Код: Выделить всё
var a:integer;
function getInt():integer;external;
function putInt(a:integer):integer;external;
begin
a:=getInt();
putInt(a*a);
end.
Если в коде ошибки, оно пока сегфолтится.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сообщения: 59
Re: Начала работы с YACC
Спасибо огромное! Буду разбираться.
-
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Начала работы с YACC
AFAIK есть Bison под Windows.
demetrius2003 писал(а): ↑20.04.2011 19:32Т. е. Bison полностью аналогичен? В том смысле, проект переписывать не придётся?
Они не на 100% идентичные.
PS. Моя программа под виндой не факт, что скомпилируется (по крайней мере Makefile надо будет переписать полностью).
PPS. Если будет время - выложу какой-нибудь более простой пример использования Bison.
-
- Администратор
- Сообщения: 5409
- ОС: Gentoo
Re: Начала работы с YACC
YACC - это сейчас не программа, а стандарт на программу. Для него есть множество реализаций, в том числе GNU Bison и Berkeley Yacc. Они обе совместимы со стандартом, т.е. код, строго следующий стандарту, они обе обработают одинаково; однако они содержат _разные_ наборы нестандартных фичей, используя которые вы привязываетесь к конкретной реализации.
-
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Начала работы с YACC
byacc нормально скомплировал код, который я здесь выложил (по крайней мере ошибок не сказал, кроме неоднозначности с if-else), но main.tab.hpp не сгенерировал 
UPD. Разобрался, просто byacc файлы называет не так, как bison. Моя программа с byacc теперь компилируется и работает (изменял только имена файлов в инклудах и Makefile, и заменил в Makefile bison на byacc).

UPD. Разобрался, просто byacc файлы называет не так, как bison. Моя программа с byacc теперь компилируется и работает (изменял только имена файлов в инклудах и Makefile, и заменил в Makefile bison на byacc).
-
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Начала работы с YACC
Есть книга Flex & Bison, но она на английском.
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Начала работы с YACC
почему «но»? в наше время в подобной литературе переводы такие делают, что уж лучше б даже и не брались.
конечено, есть исключения.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 59
Re: Начала работы с YACC
Иногда читать на английском довольно сложно. Но литературы на русском действительно нет. Вложенный файл изучил и понял, что ничего не знаю! Пойду читать мануалы! Может на торрентах ещё чего есть, посмотрю.
-
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Начала работы с YACC
Просто это очень сложный пример для начала. Возможно, если будет время, напишу попроще.