Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лексический/синтаксический/семантическ анализаторы 
V
    Опции темы
nerezus
  Дата 30.6.2007, 05:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Нужно C++(без шаблонов) разобрать.
Не хочется писать анализатор. Очень не хочется. Что будем советовать?
Есть пара потенциальных вариантов типа сырцов gcc, сырцов doxygen, boost::sprtit, flex/bison, но еще не смотрел ничего

Что советуем?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
apook
Дата 30.6.2007, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата(nerezus @  30.6.2007,  05:51 Найти цитируемый пост)
Не хочется писать анализатор.

А что еще можно сделать? Там я встречал в НЭТе где-то готовую библиотеку что то вроде abc как-то называется в Linux используется, но я сам написал "некрутой" анализатор мне хватило.


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Goganchic
Дата 30.6.2007, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



Есть такое специальное средство, называется ANTLR. Оно позволяет создавать любые компиляторы / парсеры / лексеры. Советую его. Принцип работы такой: ты создаешь грамматику, а потом ANTLR генерирует по ней код на Си++ или  Java.
Хотя в принципе тебе потребуется составить анализатор....
PM Jabber   Вверх
Fazil6
Дата 30.6.2007, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



я использую styxlib 1.7
позволяет получать по грамматике синтаксический и семантический анализатор на С
PM MAIL   Вверх
MAKCim
Дата 30.6.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(nerezus @  30.6.2007,  05:51 Найти цитируемый пост)
Нужно C++(без шаблонов) разобрать.

 smile 
а зачем, если не секрет?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Void
Дата 30.6.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



GCC-XML.

Elsa и Oink.

Браться за генераторы парсеров не стоит.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Daevaorn
Дата 30.6.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(MAKCim @ 30.6.2007,  10:12)
Цитата(nerezus @  30.6.2007,  05:51 Найти цитируемый пост)
Нужно C++(без шаблонов) разобрать.

 smile 
а зачем, если не секрет?

Ага, а то boost::spirit и нет проблем.
PM MAIL WWW   Вверх
nerezus
  Дата 30.6.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Цитата

а зачем, если не секрет?
 пару изменений в синтаксисе сделать )


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
MAKCim
Дата 30.6.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(nerezus @  30.6.2007,  10:26 Найти цитируемый пост)
пару изменений в синтаксисе сделать )

ясно  smile 
бери исходники GCC и это



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nerezus
  Дата 30.6.2007, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



MAKCim, а к примеру gcc под винду легко скомпилить?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Любитель
Дата 30.6.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(nerezus @  30.6.2007,  05:51 Найти цитируемый пост)
Что советуем?

Что душе ближе  smile 

Я из всего сего лично со спиритом в своё время лишь работал (gcc, doxygen, конечно юзаю, но не сорсы smile ), делал в частности разбор Модула-2 подобной вещи. Мне так потому спирит нравиться. А так - смотри по ситуации. Если тебе компилятор нужен, то бесспорно легче всего gcc-шные сорсы брать и раскапывать.


--------------------
PM MAIL ICQ Skype   Вверх
Goganchic
Дата 30.6.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



Цитата(nerezus @ 30.6.2007,  10:26)
Цитата

а зачем, если не секрет?
 пару изменений в синтаксисе сделать )

а зачем?
PM Jabber   Вверх
nerezus
  Дата 30.6.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Цитата

а зачем?
 а надо =)

походу начну со спирита )


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Void
Дата 30.6.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



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

И взгляни ещё на Stratego вместе с Transformers.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Любитель
Дата 30.6.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(Void @  30.6.2007,  15:52 Найти цитируемый пост)
Спирит у меня оставил впечатление инструмента не на своём месте.

А почему так? :(

Цитата(Void @  30.6.2007,  15:52 Найти цитируемый пост)
 Связываться с ним для разбора сложного языка я бы не стал.

Потихоньку-потихоньку - и ничего ведь сложного... smile Насчёт производительности полученного чуда - ничего сказать не могу, не знаю :|


--------------------
PM MAIL ICQ Skype   Вверх
Void
Дата 1.7.2007, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Любитель, на мой взгляд, спирит неплох для небольших парсеров, встречающихся в качестве побочной задачи. Полноценные ЯП на нём реализовывать не хочется.
Семантические действия задавать неудобно, деревья создавать неудобно.
Компилируется очень долго, сообщения об ошибках чудовищны, отладка никакая.
В конечном счёте, при определённом размере грамматики, это перекрывает преимущества лёгкой интеграции с C++.

В общем, C++ не слишком подходящий язык для inline-парсеров. Тут рулят Haskell с Parsec или OCaml с CamlP4. Для C++ есть ANTLR (пока, увы, только 2.x; 3.0 — сказка, но генерация недоделана) или Elkhound (не такой стабильный и популярный, зато GLR).


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
nerezus
  Дата 1.7.2007, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Хм... итак юзать придется ANTLR походу?
Но он как бы... на джаве? Я прав? А как взаимодействовать с моим С++-кодом?

Хотел бы именно иметь дерево как результат работы парсеров.

P.S. наверное писать буду на куте4.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Void
Дата 1.7.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(nerezus @  1.7.2007,  11:56 Найти цитируемый пост)
Но он как бы... на джаве? Я прав? А как взаимодействовать с моим С++-кодом?

Он написан на Java, но может генерировать с равным успехом Java, C++, C# и др.

На сайте ANTLR есть пример грамматики C++ с семантическими действиями на C++.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Ulysses4j
Дата 1.7.2007, 16:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 4
Всего: 10



Один из последних вопросов такого толка на clcm вызвал реакцию в духе: еще один, пытающийся найти holy grail. Регулярно появляются люди с желанием написать парсер С++. Для такой задачи, конечно, надо брать генератор парсеров типа Antlr, но вся ж сложность не в этом выборе. Грамматику нужно описать. С++ - язык с очень сложной грамматикой - это авторы признают, полного описания не смог придумать даже Комитет.

Короче говоря, это то же, что спросить: "как мне написать свою ОС".

Это сообщение отредактировал(а) Ulysses4j - 1.7.2007, 16:24


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
nerezus
  Дата 1.7.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



мм, замечательно, типа оказывается задача не имеет решения?..


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Void
Дата 1.7.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Задача решаема, компиляторы C++ же существуют.
Просто грамматика C++ имеет массу неоднозначностей. Условие «без шаблонов» снимает значительную их часть.
Возможно, не все из оставшихся потребуют обязательного разрешения для данной задачи.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Thunderbolt
Дата 24.2.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


DevRel
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 7.11.2007
Где: Тула

Репутация: 10
Всего: 16



Цитата(nerezus @ 30.6.2007,  05:51)
Нужно C++(без шаблонов) разобрать.
Не хочется писать анализатор. Очень не хочется. Что будем советовать?
Что советуем?

Я понимаю, что опоздал с ответом.
Но вдруг еще кому-то пригодится:
OpenC++ library. http://opencxx.sourceforge.net
VivaCore library. http://www.viva64.com/articles/VivaCore_Li..._%28rus%29.html
(А еще можно написать мне и я с интересом обсужу подобные вопросы. [email protected])
--------------------
Карпов Андрей, DevRel в PVS-Studio.
PM MAIL WWW   Вверх
Mayk
Дата 24.2.2008, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



В сторону: мне тут SLK советовали в частности для прототипов грамматик. Строит табличный LL(k) парсер. В нём не надо описывать всякие "%token"'ы и даже вместо "|" правила ветвлят переводом строки. Правда он вроде платный.

По топику: nerezus, распарсил с++ или не стал заморачиваться?


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
vadiml
Дата 26.2.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 2
Всего: 7



nerezus, 

Я парсер C++ кода на перле писал, правда там задача посложнее была -- я отлавливал все функции классов и на основе их прописывал вызов. Шаблонные классы я пропустил, хотя сейчас уже придумал как и их задействовать.
PM MAIL Jabber   Вверх
nerezus
  Дата 27.2.2008, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Вобщем для готового парсера написали набор правил, взяв за основу правила C.
Распарсить надо было не все, поэтому справились. И модифицировали код через перегрузку. И собственно все работало ))


Теперь для себя решил написать компилер джавы. Именно компилер =)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Void
Дата 27.2.2008, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(nerezus @  27.2.2008,  23:19 Найти цитируемый пост)

Теперь для себя решил написать компилер джавы. Именно компилер =) 

Во что? smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Mayk
Дата 28.2.2008, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(nerezus @  28.2.2008,  01:19 Найти цитируемый пост)

Теперь для себя решил написать компилер джавы. Именно компилер =)

Посмотри на размер исходников jikes'а smile, авось передумаешь  smile

Добавлено через 1 минуту и 1 секунду
(jikes - это старый компилятор явы в байткод, кажеццо ещё без поддержки генериков)

Это сообщение отредактировал(а) Mayk - 28.2.2008, 07:02


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
nerezus
  Дата 28.2.2008, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Void, в байткод. И написать под него VM. Только вот несовместимую с оригиналом.
Сейчас придумываю формат комманд и формат байткода.
И наконец-то первый раз, думаю, напишу сабж не на питоне ) А то получалось, что всегда подобное у меня само собой на питоне пишется )


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0755 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.