Недавно я учился в школе, где нам пришлось изучать Scheme, чтобы создать синтаксический анализатор для простого языка, похожего на схему. В течение семестра мы добавили в свой парсер, чтобы сделать его все более и более интересным.
С тех пор, в свое свободное время, я начал писать свой собственный парсер, который немного лучше того, что я делал в классе, но он анализирует мой код C ++, собирает список всех структур данных и открытых членов, и генерирует для него анализатор рекурсивного спуска. Например, если у меня есть следующее
class Bar
{
public:
int a;
}
class Foo
{
public:
Bar* myBar;
int x;
}
и я запускаю на нем мой генератор синтаксического анализатора, он выделяет новый класс, называемый просто Parser, который я могу использовать для чтения из файла:
Parser p;
Foo* f = p.parseFoo("example.txt");
где example.txt будет выглядеть примерно так:
Foo
{
myBar
{
a 5
}
x 10
}
(Это всего лишь простой пример, есть и другие полезные вещи, такие как распознавание, когда он должен быть push-back-in для вектора, и возможность назначать обратные вызовы функций)
Это похоже на то, что другие (вероятно, умнее) люди должны были делать до меня. Я сделал несколько быстрых поисков в Google, чтобы увидеть, что там было, но есть много вещей, которые нужно просеять. Итак, мой вопрос заключается в следующем: существуют ли инструменты, которые делают то, что сейчас делает мой генератор парсера? Стоит ли продолжать этот проект * или уже есть лучшие инструменты?
* Конечно, всегда стоит продолжать учиться. Скорее, я имею в виду пользователя, который хотел бы читать структуры данных из текста.