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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лексический/синтаксический/семантическ анализаторы 
V
    Опции темы
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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