LINUX.ORG.RU

Практическое использование lex/flex yacc/bison

 , , , ,


0

2

Кто-то сталкивался с использованием вышеупомянутых средств? Каково практическое применение. Немного прочитал, почти ничего не понял. Где и как я могу применить у себя, например на сервере локалхоста?

★★★★★

можно написать калькулятор, если начнешь писать что-то сложнее парсера конфигов то может случиться облом (в моей практике неоднократные попытки написать что-то действенно наталкивались на баги и прочие косяки)

но если тебе хочется написать тузлу для анализа например sql, или какогонить формата конфигов, а то и просто сделать свой маленький dsl то эти штуки для тебя

subwoofer ★★★★★ ()
Ответ на: комментарий от subwoofer

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

Калькулятор видел, стоит ли действительно с него начинать? Не сложно вот так сразу?

Насчет парсера конфигов можно подробнее, изначально планировалась именно идея написания несложного парсера в рамках дисциплины «Системное программное обечпечение» в универе.

Amet13 ★★★★★ ()

хочешь сделать свой клёвый ЯП или DSL? Тогда можно начать с вышеупомянутых инстументов. В PostgreSQL, например, парсер SQL сделан на flex/bison

mashina ★★★★★ ()
Ответ на: комментарий от mashina

хочешь сделать свой клёвый ЯП или DSL?

Не-а.

Ссылок не подкинете на основы основ?

Amet13 ★★★★★ ()
Ответ на: комментарий от Amet13

тогда рекомендую чутка покурить «книгу дракона»: http://ru.wikipedia.org/wiki/%CA%EE%EC%EF%E8%EB%FF%F2%EE%F0%FB:_%EF%F0%E8%ED%...

там на русском и чуть ли не библия этого дела, парсер калькулятора в годы универа я вообще писал вручную, там самое затейливое перевести a+b*c => +(a,*(b,c))

также можешь скачать antlworks2, там графический интерфейс к этому делу, для начального погружения самое оно, но там в основе всего java, хотя и обещают вроде как код и для других языков

subwoofer ★★★★★ ()
Последнее исправление: subwoofer (всего исправлений: 1)
Ответ на: комментарий от subwoofer

Анталр это вообще совершенно другой анализатор. Он во первых строит LL грамматики, во вторых там есть биндинги для кучи языков. Точно можно на сях и питоне.

actics ()

Практически все парзилки конфигов в *bsd'шных утилитах. Ну и я когда-то писал свой ассемблер для dcpu16. ;)

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от Amet13

Что бы понять основы прочитай Книгу дракона, как уже посоветовали. Там есть вся математическая база.
Калькулятор же это самое простое, что можно сделать.
У нас в универе ведут прикольный курс по этому делу. Преподаватель выкладывает материалы на http://tswr.ru/ там можно найти и bison и antlr. Но не стоит ожидать от статей качества, это скорее материалы, что бы после пары можно было на что-то опираться при подготовке домашки.

actics ()
Ответ на: комментарий от actics

Он во первых строит LL грамматики

к своему стыду, я их от LALR и других не отличаю, что мне всяко не мешает пользоваться сими тузлами или писать интерпретаторы вручную

subwoofer ★★★★★ ()
Ответ на: комментарий от subwoofer

оО, там же совсем разный подход к разбору!
Простыми словами - по LL одним строятся нисходящие анализаторы, по LR восходящие.

actics ()
Ответ на: комментарий от subwoofer

тогда рекомендую чутка покурить «книгу дракона»:

Зачем сразу Dragon book? Лучше взять какую-нибудь хорошую книгу по теории формальных грамматик на русском языке.

proud_anon ★★★★★ ()

Где и как я могу применить у себя, например на сервере локалхоста?

flex можно использовать как такой awk, но на C.

bison можно использовать для создания сложных парсеров.

Насколько я помню и у того и у другого были вполне вменяемые мануалы.

no-such-file ★★★★★ ()

lex - это инструмент для построения лексического анализатора. В зависимости от заданных тобой правил разбивает входную последовательность данных на токены. Yacc - грамматический анализатор. Получает на вход последовательность токенов, созданную на предыдущем шаге, и проверяет их типы и порядок в соответствии с заданной тобой грамматикой. Эти два инструмента очень мощные, однако тот же yacc без специальных извращений не может парсить контекстно-зависимую грамматику.

m0rph ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.