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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Syntax Highlightning. Выбор парсера 
:(
    Опции темы
cutwater
Дата 12.10.2011, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброго времени суток, коллеги!

Собственно стоит задача написать редактор с подстветкой синтаксиса для языка с контекстно свободной грамматикой.
Насколько мне известно существуют два подхода используемых в редакторах и IDE:

1. Полный лексический и синтаксический анализ исходного кода, что дает максимум возможностей для редактора
2. Простой разбор на основе регулярных варащений и т.п.

Вопрос заключается в том, какие сердства на сегодняшний день являются наиболее актуальными, при помощи которых можно реализовать данную задачу?

Пока что мною рассматриваются варианты: boost::spirit, ANTLR, bison/yacc, писать лексер / парсер вручную.


--------------------
user posted image
PM MAIL   Вверх
boostcoder
Дата 12.10.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



я недавно разбирался с libclang(думал применить к некоторой задаче), и набрел на такой плагин для vim: https://github.com/Rip-Rip/clang_complete
идея в том, что clang-front-end используется как препроцессор+парсер+база токенов единицы трансляции.
этот плагин меня невероятно удивил. он умеет парсить исходники учитывая директивы препроцессора, умеет дополнять все что законно в с++, в том числе и не тривиальные шаблонны, и даже директивы препроцессора.
работает невероятно быстро для своей задачи.

Добавлено через 1 минуту и 49 секунд
libclang собирается под win/linux/mac.

Это сообщение отредактировал(а) boostcoder - 12.10.2011, 18:50
PM WWW   Вверх
cutwater
Дата 12.10.2011, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Весьма интересно, обязательно взгляну. Но нужен парсер не для С и С++, поэтому вряд ли clang подойдет.


--------------------
user posted image
PM MAIL   Вверх
boostcoder
Дата 12.10.2011, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



Цитата(cutwater @  12.10.2011,  18:53 Найти цитируемый пост)
нужен парсер не для С и С++

а для каких ЯП?

Добавлено @ 18:57
Цитата(boostcoder @  12.10.2011,  18:50 Найти цитируемый пост)
даже директивы препроцессора

т.е. макросы smile прошу прощения.

Добавлено через 10 минут и 51 секунду
еще посмотрите на http://www.scintilla.org/
для этого и создавалось.

Это сообщение отредактировал(а) boostcoder - 12.10.2011, 18:58
PM WWW   Вверх
cutwater
Дата 12.10.2011, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(boostcoder @  12.10.2011,  17:56 Найти цитируемый пост)
а для каких ЯП?


VHDL, Verilog, например.


--------------------
user posted image
PM MAIL   Вверх
boostcoder
Дата 12.10.2011, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



тогда вам лучше всего подойдет scintilla.
PM WWW   Вверх
cutwater
Дата 12.10.2011, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(boostcoder @  12.10.2011,  18:15 Найти цитируемый пост)
тогда вам лучше всего подойдет scintilla.


Мне нужен именно парсинг, вопрос был больше по поводу парсинга грамматик для последующей подсветки синтаксиса.
Scintilla не подходит. 
boostcoder, мы отклонились далеко от темы. Давайте работать в обозначенных рамках.
При всем уважении, Вы сейчас даете советы не исходя из вопроса. Дополнительные условия я не конкретизировал (ибо расписывать все детали проекта избыточно по моему мнению), но описал направление по которому хотел бы побеседовать.


--------------------
user posted image
PM MAIL   Вверх
newbee
Дата 12.10.2011, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


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

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



Если нужна только подсветка синтаксиса, достаточно выдрать из исходника все ключевые слова и последовательности и должным образом подсветить их. Это уровень лексики, можно воспользоваться регулярными выражениями, сгенерировать лексер или написать его самому. Если ты хочешь интеллектуальное автодополнение и подсветку синтаксических ошибок, это уже уровень синтаксиса языка, а значит регулярки подсасывают. Тут два этапа: лексер и парсер. С первым выше разобрались. Второй опять же можешь делать так, как умеешь: непонятным буст-спиритом, генератором или руками. Естественно полноценный парсинг скорее всего не потребуется, нужно будет реализовать только интересующие тебя моменты. Например для С++, если нас интересует автодополнение, может очень понадобиться адекватный разбор типов и аргументов функций, но, скажем, на корректность записи цикла for можно положить. С другой стороны, если ты хочешь тотально проверять синтаксис, нужно уметь детально вертеть любыми выражениями языка. Если идти дальше, можно даже начать немного понимать семантику и это уже будет не банальная подсветка синтаксических ошибок, а система статического анализа кода. Звучит гордо!)

Немного сумбурно, но как-то так. Если сложно парсить, основная суть где-то в первой половине абзаца))


--------------------
You're face to face
With man who sold the world
PM   Вверх
cutwater
Дата 12.10.2011, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
user posted image
PM MAIL   Вверх
bsa
Дата 13.10.2011, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 63
Всего: 196



cutwater, для простой подсветки слов, думаю, достаточно просто списка ключевых слов (в крайнем случае регулярок)...
PM   Вверх
boostcoder
Дата 13.10.2011, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



Цитата(cutwater @  12.10.2011,  19:40 Найти цитируемый пост)
мы отклонились далеко от темы.

да, унесло меня. сорри.
PM WWW   Вверх
newbee
Дата 13.10.2011, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


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

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



Цитата(cutwater @  13.10.2011,  00:06 Найти цитируемый пост)
Дак вот и вопрос, что для этого использовать. Серебряной пули не бывает, но мало ли, может у кого-нибудь есть опыт. 
Я ж что и говорю, разберись сначала с тем, что именно хочешь, чтобы решить, какой уровень анализа текста нужен. А так пока размышления о сферических животных в безвоздушном пространстве.


--------------------
You're face to face
With man who sold the world
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.