синтаксический анализ — генератор синтаксических анализаторов C ++

Я пишу свой собственный язык сценариев, и мне нужен программный инструмент, который генерирует код C ++ для анализа моего языка. Мне нужен лексический анализатор и генератор синтаксического анализатора, который генерирует код C ++. Было бы хорошо, если бы у меня была возможность создавать проект Visual C ++ 2010. Предложения?

2

Решение

Попробуйте с Flex и Bison. Они являются хорошими лексическими анализаторами и генератором синтаксических анализаторов, полезными для определения новых языков.

http://en.wikipedia.org/wiki/Flex_lexical_analyser

2

Другие решения

http://en.wikipedia.org/wiki/Comparison_of_parser_generators

для C / C ++: http://epaperpress.com/lexandyacc/

Или посмотрите на: Boost.Spirit:

«Spirit — это набор библиотек C ++ для анализа и генерации вывода
реализован как специфичные для домена встроенные языки (DSEL) с использованием
Шаблоны выражений и шаблон мета-программирования. «

Тебе действительно нужен новый язык? Может быть, было бы лучше использовать некоторые известные, как Lua, Python?

6

Это старый вопрос, но все еще может быть актуальным: поскольку я был недоволен существующими опциями, я недавно написал генератор синтаксического анализатора шаблонов c ++, который не нуждается во внешних инструментах (вы включаете заголовок и определяете грамматику непосредственно в источнике c ++) , Он использует читаемые грамматики PEG, поэтому нет необходимости в отдельном шаге лексинга. Вы можете проверить это на Github.

1

У вас есть два варианта: создать ли свой собственный парсер, создав АСТ (абстрактное синтаксическое дерево), тогда это будет хорошим упражнением для вас, но его очень долго и сложно реализовать. Или вы можете использовать решение с открытым исходным кодом, такое как ANTLR Генератор синтаксического анализатора, который имеет грамматику для C / C ++, а также препроцессор. Я никогда не использовал его, поэтому я не могу сказать, насколько полным будет его разбор C ++. Тогда Если вы спешите и хотите создать хороший парсер, вам лучше использовать второе решение

0
По вопросам рекламы [email protected]