Где я могу найти стандартный BNF или грамматику YACC для языка C++?

Я не уверен, что структура dt имеет большое значение (если вы не используете какие-либо внутренние значения для разделения). Помогает ли это?

 spl.dt <- split( dt , cut(1:nrow(dt), 12) )

 lapply( spl.dt, my_fun) 
22
задан paxdiablo 5 March 2009 в 03:27
поделиться

5 ответов

От FAQ C++, Облегченный :

38.11 там yacc-способная грамматика C++?

основная yacc грамматика, которую Вы захотите, от Ed Willink. Ed полагает, что его грамматика полностью совместима с стандарт C++ ISO/ANSI , однако он не гарантирует его: "грамматика не имеет", говорит он, "используемый в гневе". Можно добраться грамматика без стандартных программ действия или грамматика с фиктивными стандартными программами действия . Можно также добраться соответствующий лексический анализатор . Для тех, кто интересуется тем, как он достигает контекстно-свободного синтаксического анализатора (продвигая все неоднозначности плюс небольшое количество восстановлений, которые будут сделаны позже после того, как парсинг завершен), Вы могли бы хотеть прочитать главу 4 его тезис .

существует также очень старая yacc грамматика, которая не поддерживает шаблоны, исключения, ни пространства имен; плюс он отклоняется от базового языка некоторыми тонкими способами. Можно получить ту грамматику здесь или здесь .

24
ответ дан Jared Oberhaus 29 November 2019 в 05:04
поделиться

Ссылка Jared является самой близкой вещью к контекстно-свободной грамматике, которую можно получить. Определенные вещи действительно должны быть на потом отложены, но это некоторыми аргументами лучше, чем контекстно-зависимая грамматика C++.

Ко всем неприятностям, C++ 1x значительно усложнит грамматику. Для получения до идеального синтаксического анализа C++ синтаксический анализатор должен будет реализовать достаточно стандарта, чтобы правильно сделать разрешение перегрузки, включая вычет аргумента шаблона, который в свою очередь потребует механизма понятий, лямбд и в действительности почти всего языка, за исключением двухэтапных спецификаций поиска и исключения имени, которым, если я вспоминаю правильно, не нужна фактическая реализация для парсинга программы успешно.

В действительности, Вы являетесь промежуточными к компилятору, если можно проанализировать C++.

2
ответ дан coppro 29 November 2019 в 05:04
поделиться

Я нашел этот недавно. Я не испытал его, так не уверено, работает ли это. Вы могли дать больше информации об инструменте, который Вы пытаетесь разработать? Я загрузил эту грамматику, потому что я работаю над инструментом инструментария, таким образом, я могу добавить информацию о покрытии для моего платформа модульного теста .

После перечитывания Вашего комментария...

я думаю , этот инструмент точно соответствует Вашим потребностям.

2
ответ дан Dushara 29 November 2019 в 05:04
поделиться

Наш набор инструментов для реинжиниринга программного обеспечения 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.

1
ответ дан 29 November 2019 в 05:04
поделиться

В качестве другого подхода вы можете рассмотреть возможность использования существующего компилятора.

GCC-XML «компилирует» C ++ в файлы XML с большим количеством полезной информации; этого может хватить для ваших целей.

К сожалению, GCC-XML поддерживается только на 1/4, и заставить его работать может быть ... интересно. Удачи, если вы пойдете по этому маршруту.

2
ответ дан 29 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: