| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
а для каких ЯП? Добавлено @ 18:57 т.е. макросы Добавлено через 10 минут и 51 секунду еще посмотрите на http://www.scintilla.org/ для этого и создавалось. |
| Автор: cutwater 12.10.2011, 19:09 |
VHDL, Verilog, например. |
| Автор: boostcoder 12.10.2011, 19:15 |
| тогда вам лучше всего подойдет scintilla. |
| Автор: cutwater 12.10.2011, 19:40 |
Мне нужен именно парсинг, вопрос был больше по поводу парсинга грамматик для последующей подсветки синтаксиса. 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 |
да, унесло меня. сорри. |
| Автор: newbee 13.10.2011, 13:09 |
| Я ж что и говорю, разберись сначала с тем, что именно хочешь, чтобы решить, какой уровень анализа текста нужен. А так пока размышления о сферических животных в безвоздушном пространстве. |