Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Syntax Highlightning. Выбор парсера


Автор: cutwater 12.10.2011, 18:38
Доброго времени суток, коллеги!

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Автор: boostcoder 12.10.2011, 19:15
тогда вам лучше всего подойдет scintilla.

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


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

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

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

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

Автор: bsa 13.10.2011, 12:47
cutwater, для простой подсветки слов, думаю, достаточно просто списка ключевых слов (в крайнем случае регулярок)...

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

да, унесло меня. сорри.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)