crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Qt и lex/flex. Не знаю что.
smartchecker
  опции профиля:
сообщение 28.9.2012, 19:17
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 83
Регистрация: 7.9.2011
Пользователь №: 2853

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть такая задача - написать лексический анализатор.
Цитата
Входной язык содержит логические выражения, разделённые символом ; (точка с запятой).
Логические выражения состоят из идентификаторов, шестнадцатиричных чисел, знака присваивания (:=),
знаков операций or, xor, and, not и круглых скобок. Комментарии обозначаются // (двойной слэш).

После беглого копания в и-нете пришёл к выводу, что нужно использовать lex.
Возникает несколько вопросов:
1. Где найти толковые книжки?
2. Как прикрутить к Qt?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 28.9.2012, 20:10
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


про lex ничего не могу сказать, я лично для написания парсеров юзаю ANTLR. это генератор парсеров, написанный на Java, к нему есть модуль для генерации кода на С libantlr3c.
правда, книжек тоже нифига нет, только одна - от автора этого проекта, зато документация есть неплохая по нему.
с налёту, без опыта, такие вещи пишутся долго и нудно. ANTLR и ANTLRWorks это дело упрощают, с моей точки зрения.

Qt - не язык программирования. это лишь библиотека, как и lex. так что "прикручивается" всё как обычно в С++ - через средства языка.

вообще, для такого простого парсера можно даже regexp'ы заюзать, если хорошо их знать.

Сообщение отредактировал Iron Bug - 28.9.2012, 20:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.10.2012, 22:10
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


smartchecker, глянь QLALR (исходник, блог)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
smartchecker
  опции профиля:
сообщение 6.10.2012, 15:29
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 83
Регистрация: 7.9.2011
Пользователь №: 2853

Спасибо сказали: 0 раз(а)




Репутация:   0  


Поставил ANTLR и ANTLRWorks. Скачал книжку The_Definitive_ANTLR_Reference.pdf
Вдумчиво читаю - с пониманием того, что читаю туговато.
Мне бы хоть пример простенький.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 8.10.2012, 9:10
Сообщение #5


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(smartchecker @ 6.10.2012, 18:29) *
Мне бы хоть пример простенький.

там у них на сайте до чёрта примеров. там готовые парсеры чего угодно есть, включая даже парсер языка С.
а так-то да, небыстрое это дело - вникание в логику парсеров. тут хоть с какой стороны копай, с любой библиотекой, но если опыта нет, то всё равно будет не быстро.

я тут давно ещё маленько писала, как прикрутить 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.2.2025, 1:25