Начало работы с ANTLR4 и C ++ - PullRequest
0 голосов
/ 08 мая 2020

Тот, кто задает вопрос впервые, так что терпите меня. Итак, у меня есть файл грамматики из репозитория грамматик, который я пытаюсь использовать с C ++. (Разработка на macOS). У меня нет проблем с созданием лексера и парсера с использованием ANTLR. Но после этого я понятия не имею, как запускать / использовать полученные файлы. cpp и .h. Я понимаю, что есть среда выполнения antlr, которую я должен загрузить, и я сделал это с веб-сайта antlr.org (дает мне две папки, antlr4-runtime и lib), но мое начинающее понимание C ++, похоже, мешает мне получить больше, чем это. Как мне использовать среду выполнения для работы с этими файлами? Я не использую IDE, просто g ++ из командной строки. Спасибо за любую помощь!

1 Ответ

0 голосов
/ 08 мая 2020

Я нашел это руководство полезным: Начало работы с ANTLR в C ++ . (Ах, после этого я видел комментарий @ggorlen.)

Если вы прокрутите страницу вниз до половины, есть раздел под названием Как использовать ANTLR в C ++ . Я думаю, что это то, где вы находитесь.

Я скопирую этот пример, поскольку SO обычно предпочитает это. Скажем, это ваш main. cpp:

#include <iostream>
#include "antlr4-runtime/antlr4-runtime.h"
#include "antlr4-runtime/SceneLexer.h"
#include "antlr4-runtime/SceneParser.h"
#include "ImageVisitor.h"

using namespace std;
using namespace antlr4;
int main(int argc, const char* argv[]) {

    std::ifstream stream;
    stream.open("input.scene");

    ANTLRInputStream input(stream);
    SceneLexer lexer(&input);
    CommonTokenStream tokens(&lexer);
    SceneParser parser(&tokens);    
    SceneParser::FileContext* tree = parser.file();
    ImageVisitor visitor;
    Scene scene = visitor.visitFile(tree);
    scene.draw();
    return 0;
}

Вы хотите включить в пример файлы лексера и парсера .h (заголовки) вместо SceneLexer / Parser, а также включить antlr4-runtime. час Затем запустите g ++ для всех ваших файлов. cpp, например,

$ g++ main.cpp YourLexer.h YourParser.h
...