LINUX.ORG.RU

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

 , , , ,


0

2

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

★★★★★

Последнее исправление: Amet13 (всего исправлений: 1)

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

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

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

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

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

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

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, хотя и обещают вроде как код и для других языков

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

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

actics
()

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

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

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

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

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

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

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

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

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

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

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

proud_anon ★★★★★
()

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

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

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

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

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

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

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