Здесь много правильных ответов, но я хотел добавить это (для полноты):
Если вы в нижней части файла cpp реализации выполняете явное инстанцирование всех типов, которые будут использоваться шаблоном с, компоновщик сможет найти их как обычно.
Изменить: добавление примера явного создания экземпляра шаблона. Используется после того, как шаблон определен, и определены все функции-члены.
template class vector<int>;
Это создаст экземпляр (и, следовательно, сделает доступным для компоновщика) класс и все его функции-члены (только). Подобный синтаксис работает для функций шаблона, поэтому, если у вас есть перегрузки операторов, не являющихся членами, вам может понадобиться сделать то же самое для них.
Вышеприведенный пример бесполезен, поскольку вектор полностью определен в заголовках, за исключением случаев, когда common include file (precompiled header?) использует extern template class vector<int>
, чтобы не создавать его из всех других (1000?) файлов, которые используют вектор.
Я довольно подробно изучил этот вопрос. Python-sqlparse - это не проверяющий парсер, который вам не нужен. Примеры в antlr требуют много работы, чтобы преобразовать в хороший ast на python. Стандартные грамматики sql находятся здесь , но преобразовать их самостоятельно, и вполне вероятно, что вам понадобится только подмножество из них, то есть никаких объединений. Вы также можете попробовать посмотреть на gadfly (базу данных sql на Python), но я избегал этого, поскольку они использовали свой собственный инструмент синтаксического анализа.
В моем случае мне по существу требовалось только предложение where. Я попробовал booleneo (синтаксический анализатор логических выражений), написанный с помощью pyparsing, но в итоге использовал pyparsing с нуля. Первая ссылка в сообщении Reddit Марка Рушакова дает пример использования sql. Whoosh система полнотекстового поиска также использует его, но я не смотрел на источник, чтобы понять, как.
Pyparsing очень прост в использовании, и вы можете очень легко настроить его так, чтобы он отличался от sql (большая часть синтаксиса вам не понадобится). Мне не понравился ply, поскольку он использует некоторую магию с использованием соглашений об именах.
Короче говоря, попробуйте pyparsing, он, скорее всего, будет достаточно мощным, чтобы делать то, что вам нужно, и простой интеграцией с python (с простыми обратными вызовами и обработкой ошибок) сделает опыт довольно безболезненным.
Короче говоря, попробуйте pyparsing, он, скорее всего, будет достаточно мощным, чтобы делать то, что вам нужно, а простая интеграция с python (с простыми обратными вызовами и обработкой ошибок) сделает процесс довольно безболезненным.
Короче говоря, попробуйте pyparsing, он, скорее всего, будет достаточно мощным, чтобы делать то, что вам нужно, а простая интеграция с python (с простыми обратными вызовами и обработкой ошибок) сделает процесс довольно безболезненным.
В этом сообщении Reddit предлагается Python-sqlparse в качестве существующей реализации, среди пары других ссылок.