Существуют ли инструменты, которые могут «найти ссылки» на встроенные операции? - PullRequest
1 голос
/ 11 февраля 2010

Я читал объяснение под этим пунктом в руководстве по стилю Google C ++ , и это заставило меня задуматься; Существуют ли какие-либо инструменты, которые работают как инструмент VS "Найти все ссылки", но для встроенных операций и т. П. (или, может быть, просто указатель на объект) и целое число, или где добавляются типы со знаком и без знака.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2010

Чтобы определить, какие операции являются «встроенными», вы должны быть в состоянии проанализировать C ++ и определить для каждого подвыражения, какие типы операндов есть. Тогда выбираются встроенные операции, когда операнды являются скалярами типа char, int, long, float, double, pointer и т. Д. (Не встроенными являются имена функций и знаки препинания операторов, которые использовались для переопределения таких операторов в различных определениях классов).

Синтаксический анализ C ++ довольно сложен для большинства людей. «Просто» парсер / лексер не доставит вас туда скоро или легко. Что действительно сложно, так это определить значение имен, определить типы имен, а затем определить, что означают различные подвыражения, потому что вы должны кодировать несколько сотен страниц стандарта C ++, который описывает, как все это работает. Что вам действительно нужно, так это готовый интерфейс C ++, который будет соответствовать вашей воле.

Хотя GNU и MSVC имеют полноценные интерфейсы C ++, они на самом деле хотят быть компилятором, и в значительной степени не могут помочь вам легко.

Набор реинжиниринга программного обеспечения DMS идеально подходит для этой задачи. Он разработан для поддержки создания пользовательских инструментов анализа и имеет полные языковые интерфейсы для многих стандартных языков, включая C, Java, C #, COBOL ... и, наконец, C ++.

DMS анализирует исходный текст так же, как и компилятор, создает структуры данных компилятора (деревья, таблицы символов и т. Д.) И делает их доступными главным образом с помощью процедурного API, чтобы вы могли писать запросы к этим структурам данных.

Один из этих запросов: «для этого дерева, какой тип?». Используя это, довольно просто определить, есть ли у вас «стандартный» оператор, такой как integer-add.

РЕДАКТИРОВАТЬ: (Как ни странно, через несколько дней после написания этого ответа, я только что получил небольшой контракт, чтобы идентифицировать все не встроенные операторы в программе C ++!).

0 голосов
/ 11 февраля 2010

Мне не известны такие инструменты, но если у вас есть доступ к парсеру / лексеру, то в принципе вы можете создать такой инструмент. Я не знаю много о Visual Studio и о том, сколько у вас есть доступа, чтобы написать свои собственные плагины. Это должно быть возможно с затмением или netbeans. Если вы пользователь emacs, взгляните на cedet. В настоящее время я возился с этим, и, кажется, не так уж сложно реализовать такой инструмент с использованием семантической базы данных.

...