【问题标题】:Using ANTLR3 C++ code generation使用 ANTLR3 C++ 代码生成
【发布时间】:2015-05-28 18:49:52
【问题描述】:

我想在我的 C++ 程序中使用 ANTLR 3.5,但我遇到了如何实际使用生成的解析器和词法分析器的麻烦。使用类似于here 的语法,我可以执行类似 SimpleCalcParser.expr() 的操作。但是,如果我想做一些更复杂的事情(例如,解析一种不仅会产生单个值,而且会产生更多命令性或声明性的语言),那么使用 C++ 目标似乎相当困难。据我所知,没有能力输出 AST 或模板。没有这个,我不确定除了确定您的输入是否正确解析之外,您还能做什么。有谁知道如何使用 C++ 目标执行此操作,或者使用 C 目标生成 AST 并在 C++ 中使用它是更好的选择?

【问题讨论】:

    标签: c++ antlr antlr3


    【解决方案1】:

    前段时间我为 C++ 目标创建了一些补丁(参见 github)。应该添加 AST 生成(但不是 100% 完成)并且还添加了一些测试,您可以将其用作示例。在当前的 ATLR 3.5 中,每个规则都必须返回一些复杂的类作为值。而且您必须使用规则操作手动“构建”树。

    【讨论】:

    • 当我尝试编译时,似乎仍然不支持在选项中使用“output=AST”。解析完成后是否还有一个树节点通过?是否有任何特殊语法可以将复杂类作为值返回?涉及树创建的测试实际上并没有运行,所以我不确定它们会如何提供帮助。
    • 尝试从此分支github.com/ibre5041/antlr3/tree/… 编译您自己的工具。这里还有一些测试github.com/ibre5041/antlr3/tree/…。另请查看示例 s003.g
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多