![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
smartchecker |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 83 Регистрация: 7.9.2011 Пользователь №: 2853 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Есть такая задача - написать лексический анализатор.
Цитата Входной язык содержит логические выражения, разделённые символом ; (точка с запятой). Логические выражения состоят из идентификаторов, шестнадцатиричных чисел, знака присваивания (:=), знаков операций or, xor, and, not и круглых скобок. Комментарии обозначаются // (двойной слэш). После беглого копания в и-нете пришёл к выводу, что нужно использовать lex. Возникает несколько вопросов: 1. Где найти толковые книжки? 2. Как прикрутить к Qt? |
|
|
Iron Bug |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
про lex ничего не могу сказать, я лично для написания парсеров юзаю ANTLR. это генератор парсеров, написанный на Java, к нему есть модуль для генерации кода на С libantlr3c.
правда, книжек тоже нифига нет, только одна - от автора этого проекта, зато документация есть неплохая по нему. с налёту, без опыта, такие вещи пишутся долго и нудно. ANTLR и ANTLRWorks это дело упрощают, с моей точки зрения. Qt - не язык программирования. это лишь библиотека, как и lex. так что "прикручивается" всё как обычно в С++ - через средства языка. вообще, для такого простого парсера можно даже regexp'ы заюзать, если хорошо их знать. Сообщение отредактировал Iron Bug - 28.9.2012, 20:14 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
smartchecker |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 83 Регистрация: 7.9.2011 Пользователь №: 2853 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Поставил ANTLR и ANTLRWorks. Скачал книжку The_Definitive_ANTLR_Reference.pdf
Вдумчиво читаю - с пониманием того, что читаю туговато. Мне бы хоть пример простенький. |
|
|
Iron Bug |
![]()
Сообщение
#5
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
Мне бы хоть пример простенький. там у них на сайте до чёрта примеров. там готовые парсеры чего угодно есть, включая даже парсер языка С. а так-то да, небыстрое это дело - вникание в логику парсеров. тут хоть с какой стороны копай, с любой библиотекой, но если опыта нет, то всё равно будет не быстро. я тут давно ещё маленько писала, как прикрутить ANTLR к классам С++: http://www.forum.crossplatform.ru/index.php?showtopic=6598 вот тут есть маленько примеров про деревья, я приводила в ответах кусочки кода: http://www.forum.crossplatform.ru/index.php?showtopic=4522 так я могу подробнее ответить, но только вечером. у меня тут на работе завал после отпуска - просто времени пока нет. Сообщение отредактировал Iron Bug - 8.10.2012, 9:21 |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 1:25 |