【问题标题】:Getting Started with ANTLR4 and C++ANTLR4 和 C++ 入门
【发布时间】:2020-08-23 09:59:12
【问题描述】:

第一次在这里提问,所以请多多包涵。因此,我从语法存储库中获得了一个语法文件,我正在尝试将其与 C++ 一起使用。 (在 macOS 上开发)。使用 ANTLR 生成词法分析器和解析器没有问题。但在那之后,我不知道如何运行/使用生成的 .cpp 和 .h 文件。我知道我必须下载一个 antlr 运行时,并且我是从 antlr.org 网站下载的(给了我两个文件夹,antlr4-runtime 和 lib),但我对 C++ 的新手理解似乎阻止了我除此之外。如何使用运行时处理这些文件?我没有使用 IDE,只使用命令行中的 g++。感谢您的帮助!

【问题讨论】:

标签: c++ macos g++ antlr4


【解决方案1】:

我发现本指南很有帮助:Getting Started with ANTLR in C++。 (啊,后来看到@ggorlen 的评论了。)

如果您在该页面上向下滚动到中途,就会出现标题为如何在 C++ 中使用 ANTLR 的部分。我想这就是你所在的地方。

我将复制该示例,因为 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.h。然后在所有 .cpp 文件上运行 g++,例如

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

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多