Начала работы с YACC

Модератор: Модераторы разделов

demetrius2003
Сообщения: 59

Начала работы с YACC

Сообщение demetrius2003 »

Доброго всем времени суток!
Подскажите, где почерпнуть информации об таком замечательном инструменте, как YACC. Сегодня на работе скомпилировал пример с сайта Solotony - простенький калькулятор. Компилил правда из Quincy2005 под win32, но это не суть важно. Так я понял это получается не yet another compiler compiler, а собственно интерпретатор! Хотя это тоже не плохо. Вопрос собственно в другом. Инфы по этой программе на русском мало. Либо очень поверхностно (на одной странице), либо чрезчур академично. Есть ли что-нибудь среднее, с примерами? Желательно пример чего-нибудь наподобие basic интерпретатора. Чтоб хоть посмотреть как это делается!
С уважением, Дмитрий.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Начала работы с YACC

Сообщение sash-kan »

$ info bison
достаточно подробная документация по википедия://GNU bison
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Начала работы с YACC

Сообщение frp »

demetrius2003 писал(а):
19.04.2011 21:01
Подскажите, где почерпнуть информации об таком замечательном инструменте, как YACC.

Он уже очень давно не yacc, а bison, и самая лучшая документация по нему - info bison
demetrius2003 писал(а):
19.04.2011 21:01
Есть ли что-нибудь среднее, с примерами? Желательно пример чего-нибудь наподобие basic интерпретатора. Чтоб хоть посмотреть как это делается!

На хабре есть цикл статей по написанию простенького компилятора (там сначала интерпретатор, потом уже компиляция).
Если особо надо и не будете ругать за не особо качественный код (писалось по ходу ознакомления с bison, flex, llvm, архитектура переделывалась совсем несколько раз, писалось исключительно для собственного развития и сначала вообще не это планировалось - в результате код не очень красивый и без комментариев), то могу скинуть код компилятора маленького подмножества паскаля (flex+bison+llvm).
Спасибо сказали:
demetrius2003
Сообщения: 59

Re: Начала работы с YACC

Сообщение demetrius2003 »

Я скачал Berkley Yacc, потому как на работе Windows. Т. е. Bison полностью аналогичен? В том смысле, проект переписывать не придётся? За исходники в любом виде буду признателен. На хабре постараюсь поискать. За наводку спасибо!
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Начала работы с YACC

Сообщение frp »

Как и обещал, выкладываю архив с исходниками.

Бинарники не отправляю, т.к. 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.

Если в коде ошибки, оно пока сегфолтится.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
demetrius2003
Сообщения: 59

Re: Начала работы с YACC

Сообщение demetrius2003 »

Спасибо огромное! Буду разбираться.
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Начала работы с YACC

Сообщение frp »

demetrius2003 писал(а):
20.04.2011 19:32
Я скачал Berkley Yacc, потому как на работе Windows.

AFAIK есть Bison под Windows.
demetrius2003 писал(а):
20.04.2011 19:32
Т. е. Bison полностью аналогичен? В том смысле, проект переписывать не придётся?

Они не на 100% идентичные.

PS. Моя программа под виндой не факт, что скомпилируется (по крайней мере Makefile надо будет переписать полностью).

PPS. Если будет время - выложу какой-нибудь более простой пример использования Bison.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5409
ОС: Gentoo

Re: Начала работы с YACC

Сообщение /dev/random »

YACC - это сейчас не программа, а стандарт на программу. Для него есть множество реализаций, в том числе GNU Bison и Berkeley Yacc. Они обе совместимы со стандартом, т.е. код, строго следующий стандарту, они обе обработают одинаково; однако они содержат _разные_ наборы нестандартных фичей, используя которые вы привязываетесь к конкретной реализации.
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Начала работы с YACC

Сообщение frp »

byacc нормально скомплировал код, который я здесь выложил (по крайней мере ошибок не сказал, кроме неоднозначности с if-else), но main.tab.hpp не сгенерировал :(

UPD. Разобрался, просто byacc файлы называет не так, как bison. Моя программа с byacc теперь компилируется и работает (изменял только имена файлов в инклудах и Makefile, и заменил в Makefile bison на byacc).
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Начала работы с YACC

Сообщение frp »

demetrius2003 писал(а):
19.04.2011 21:01
Есть ли что-нибудь среднее, с примерами?

Есть книга Flex & Bison, но она на английском.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Начала работы с YACC

Сообщение sash-kan »

frp писал(а):
22.04.2011 21:23
но она на английском
почему «но»? в наше время в подобной литературе переводы такие делают, что уж лучше б даже и не брались.
конечено, есть исключения.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
demetrius2003
Сообщения: 59

Re: Начала работы с YACC

Сообщение demetrius2003 »

Иногда читать на английском довольно сложно. Но литературы на русском действительно нет. Вложенный файл изучил и понял, что ничего не знаю! Пойду читать мануалы! Может на торрентах ещё чего есть, посмотрю.
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Начала работы с YACC

Сообщение frp »

demetrius2003 писал(а):
23.04.2011 07:05
Вложенный файл изучил и понял, что ничего не знаю!

Просто это очень сложный пример для начала. Возможно, если будет время, напишу попроще.
Спасибо сказали: