Какие программы существуют для генерации парсера? - PullRequest
1 голос
/ 18 марта 2009

Недавно я учился в школе, где нам пришлось изучать 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, чтобы увидеть, что там было, но есть много вещей, которые нужно просеять. Итак, мой вопрос заключается в следующем: существуют ли инструменты, которые делают то, что сейчас делает мой генератор парсера? Стоит ли продолжать этот проект * или уже есть лучшие инструменты?

* Конечно, всегда стоит продолжать учиться. Скорее, я имею в виду пользователя, который хотел бы читать структуры данных из текста.

Ответы [ 4 ]

3 голосов
/ 18 марта 2009

lex и yacc (точнее, flex и bison ) - мощные инструменты, которые помогут вам с легкостью создавать парсеры для обычных языков.

2 голосов
/ 18 марта 2009

Boost.Spirit - очень впечатляет и полезен.

Документацию по этому вопросу можно найти здесь

Но учтите, что синтаксический анализ C ++ на самом деле не простой.

1 голос
/ 18 марта 2009

У Qt есть бесплатный инструмент, только немного документации, но он не требует много накладных расходов. Я использовал его для создания парсера для полноценного DSL. QLALR

0 голосов
/ 18 марта 2009

lex / yacc или flex / bison.
или Boost.Spirit (http://spirit.sourceforge.net/).

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