Парсер рекурсивного спуска для C - PullRequest
8 голосов
/ 27 ноября 2009

Я ищу парсер для C. Вот что мне нужно:

  1. Написано на C ( не C ++).
  2. Рукописный (не генерируется).
  3. BSD или аналогичная разрешительная лицензия.
  4. Способен к нетривиальному анализу (может быть подмножеством C).

Он может быть частью проекта, если он отделен, чтобы я мог вытащить парсер.

Существует ли существующий синтаксический анализатор, который удовлетворяет этим требованиям?

Ответы [ 8 ]

7 голосов
/ 28 ноября 2009

Если вам не нужен C99, тогда lcc - это хлопающий данк:

  • Это задокументировано в очень четкой, хорошо написанной книге.
  • Методы, используемые для синтаксического анализа операторов с приоритетом, хорошо документированы в статье и техническом отчете Дэйва Хэнсона.
  • Четкий рукописный код ANSI C.

Одним потенциальным недостатком является то, что синтаксический анализатор lcc не создает абстрактно-синтаксическое дерево & mdash; он идет прямо от синтаксического анализа к промежуточному коду.

Если вам нужен C99, то я думаю, что tinycc (tcc) - ваш лучший выбор.

2 голосов
/ 27 ноября 2009

Как насчет Разреженный ?

1 голос
/ 27 ноября 2009

Вы можете попробовать TCC . Он лицензирован по лицензии Lesser GPL.

0 голосов
/ 12 июля 2015

Хороший компилятор c присутствует в этом месте. Просто и доступно. https://github.com/rui314/8cc

0 голосов
/ 02 декабря 2010

Вот парсер рекурсивного спуска, который я портировал на C: http://www.gabotronics.com/resources/recursive-descent-parser.htm

0 голосов
/ 28 ноября 2009

Кажется, что nwcc в достаточной степени соответствует вашим требованиям.

0 голосов
/ 27 ноября 2009

Проверьте elsa, он использует алгоритм обобщенного LR.

Его основное использование для C ++, но он также анализирует код C.

Проверьте на странице , в разделе "Сколько C может анализировать Эльза?" в котором говорится, что он может анализировать большинство программ на C, включая ядро ​​Linux.

Выпущено по лицензии BSD.

0 голосов
/ 27 ноября 2009

GCC имеет один в gcc / c-parser.c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...