Pull to refresh

Comments 17

Интересная статья. Позволила сильно просветится в плане разбора языков.
Нет ни документации, ни каких-то внятных упоминаний о лицензии, ни доступа к VCS, VC 2010 only, закомментированные строки кода, комментарии на русском в исходниках. Раз уж решили что-то открывать и что-то с этого иметь, неужели по-лучше подготовиться нельзя было? Смахивает на рекламную подачку.
Если Вы дадите нам денег, то все это будет. Если Вы решитесь сами заняться поддержкой и развитием библиотеки — то это тоже будет. :)

А так я тоже на много могу пожаловаться в мире.

«Смахивает на рекламную подачку» — Простите, рекламу ЧЕГО ??
>«Смахивает на рекламную подачку» — Простите, рекламу ЧЕГО ??

или вы планируете создавать свой компилятор/среду разработки, то библиотека VivaCore вам не подойдет. В этом случае следует воспользоваться профессиональными библиотеками, например — EDG.


То есть VivaCore эта часть проекта PVS-Studio, которую мы решили сделать открытой


В том виде, каком оно есть сейчас, как-то совсем не хочется ни поддерживать ее, ни развивать.

Наработки обычно открывают не просто так, а хотят привлечь разработчиков под технологию, ненавязчиво привлечь к разработке дополнительные силы, показать открытость.

На деле же, отсуствие всякой документации отпугнет тех, кому это надо «на посмотреть», мутная лицензия позволит не допустить использования в тех же стартапах, а русский язык везде еще и радикально сузит круг осведомленных лиц.
Граждане, вас не поймешь! Делаешь коммерческий продукт — кричите дорого. Делаешь бесплатный opensource — кричите не качественно. Может быть просто покричать хочется? :-)
btw, еще стоит посмотреть на clang с llvm'ом (http://clang.llvm.org/) — они предоставляют немного больше, чем просто парсер.
Кстати надо заметить, что действительно парсер — это еще не все. Ведь мало просто разобрать код (построить дерево кода). Надо же еще иметь алгоритм обхода этого дерева.
Стало интересно, скольким людям надо разбирать С++ код в стартапе?
У Intel самый полезный блог, относительное других компаний :)
Просвятите меня, темного, — а что технически помешало сделать все/большую часть на ANTLR или каком-нибудь другом современном генераторе компиляторов? Тоесть зачем ВЕСЬ парсер и лексер вручную?
1. Парсер и лексер еще не все. Нужен алгоритм обхода дерева, получающегося в результате парсинга. Причем (конечно же) не тупого обхода, а с пониманием, что это за узел.
2. Грамматика C++ довольно сложна для автоматических парсеров.
1. Парсер и лексер еще не все. Нужен алгоритм обхода дерева, получающегося в результате парсинга. Причем (конечно же) не тупого обхода, а с пониманием, что это за узел.


Все равно непонятно. Современный компилятор сгенерирует читаемый код, который вернет AST. По полученному AST можно ходить уже вручную написанным кодом. Вопрос-то как раз зачем парсер и лексер вручную писать.

Грамматика C++ довольно сложна для автоматических парсеров.


Тоесть написать грамматику на каком-нибудь ANTLR, со встроенным GUI отладчиков и профайлером грамматик, сложнее чем вручную писать и отлаживать мегабайт C-шного кода? O_O
> По полученному AST можно ходить уже вручную написанным кодом.

В основе библиотеки, на которой построена VivaCore уже был код для обхода. Это и предопределило выбор.

> Тоесть написать грамматику…

VivaCore основана на OpenC++. Поэтому часть кода была уже написана. Готовых же к использованию граматик C++ для какого-нибудь ANTLR не нашлось. Только не надо мне в ответ давать те или иные ссылки на всякие фрагменты грамматик и говорить: «А разве вот это не работает?». Не работает. По крайней мере на момент когда мы делали выбор.
Еще немного добавлю к ответу Евгения.

«По полученному AST можно ходить уже вручную написанным кодом.»

Все не так. Как раз задача построить AST проще, чем потом его обходить и собирать информацию. Построение дерева — дело относительно нехитрое. Тут можно хоть руками, хоть не руками. Намного сложнее потом раскрывать typedef, определять тип объектов, заглядывать в namespace, работать с областями видимости переменных, что-то делать с шаблонными классами, сопоставлять фрагмент дерева и изначального текста программы, анализировать влияние pragma OpenMP и искать параллельные ошибки и так далее.

А все почему-то считают, что самое важное — дерево построить, а потом все почти само получится. :)
Sign up to leave a comment.