Я не уверен, что структура dt
имеет большое значение (если вы не используете какие-либо внутренние значения для разделения). Помогает ли это?
spl.dt <- split( dt , cut(1:nrow(dt), 12) )
lapply( spl.dt, my_fun)
От FAQ C++, Облегченный :
38.11 там yacc-способная грамматика C++?
основная yacc грамматика, которую Вы захотите, от Ed Willink. Ed полагает, что его грамматика полностью совместима с стандарт C++ ISO/ANSI , однако он не гарантирует его: "грамматика не имеет", говорит он, "используемый в гневе". Можно добраться грамматика без стандартных программ действия или грамматика с фиктивными стандартными программами действия . Можно также добраться соответствующий лексический анализатор . Для тех, кто интересуется тем, как он достигает контекстно-свободного синтаксического анализатора (продвигая все неоднозначности плюс небольшое количество восстановлений, которые будут сделаны позже после того, как парсинг завершен), Вы могли бы хотеть прочитать главу 4 его тезис .
существует также очень старая yacc грамматика, которая не поддерживает шаблоны, исключения, ни пространства имен; плюс он отклоняется от базового языка некоторыми тонкими способами. Можно получить ту грамматику здесь или здесь .
Ссылка Jared является самой близкой вещью к контекстно-свободной грамматике, которую можно получить. Определенные вещи действительно должны быть на потом отложены, но это некоторыми аргументами лучше, чем контекстно-зависимая грамматика C++.
Ко всем неприятностям, C++ 1x значительно усложнит грамматику. Для получения до идеального синтаксического анализа C++ синтаксический анализатор должен будет реализовать достаточно стандарта, чтобы правильно сделать разрешение перегрузки, включая вычет аргумента шаблона, который в свою очередь потребует механизма понятий, лямбд и в действительности почти всего языка, за исключением двухэтапных спецификаций поиска и исключения имени, которым, если я вспоминаю правильно, не нужна фактическая реализация для парсинга программы успешно.
В действительности, Вы являетесь промежуточными к компилятору, если можно проанализировать C++.
Я нашел этот недавно. Я не испытал его, так не уверено, работает ли это. Вы могли дать больше информации об инструменте, который Вы пытаетесь разработать? Я загрузил эту грамматику, потому что я работаю над инструментом инструментария, таким образом, я могу добавить информацию о покрытии для моего платформа модульного теста .
После перечитывания Вашего комментария...
я думаю , этот инструмент точно соответствует Вашим потребностям.
Наш набор инструментов для реинжиниринга программного обеспечения DMS можно получить с помощью надежного, полнофункциональный парсер C ++. Видеть http://www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html Это строит AST и таблицы символов и может вывести тип любого выражения. DMS позволяет проводить произвольные анализы и преобразования в коде C ++.
Одно «простое» преобразование - это инструментальное оснащение кода для сбора тестового покрытия данные; мы предлагаем это как инструмент COTS. См. Этот документ, чтобы понять, как это делает DMS: http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf
ИЗМЕНИТЬ Сентябрь 2013 г. (Этот ответ уже устарел): C ++ DMS парсер / разрешение имен / анализ потока управления обрабатывает полный C ++ 11, в вариантах ISO, GNU и Microsoft. Он также будет анализировать (и сохранять) исходный код, содержащий большинство условий препроцессора. Имеет явную грамматику управляет процессом синтаксического анализа, в отличие от GCC или Clang.
В качестве другого подхода вы можете рассмотреть возможность использования существующего компилятора.
GCC-XML «компилирует» C ++ в файлы XML с большим количеством полезной информации; этого может хватить для ваших целей.
К сожалению, GCC-XML поддерживается только на 1/4, и заставить его работать может быть ... интересно. Удачи, если вы пойдете по этому маршруту.