相关疑难解决方法(0)

将 Antlr 语法树转换为有用的对象

我目前正在考虑如何最好地获取使用 Antlr 生成的 AST 并将其转换为我可以在我的程序中使用的有用对象。

我的语法(除了学习)的目的是创建一种可执行(运行时解释)语言。

例如,我将如何获取属性子树并实例化特定的 Attribute 类。例如

以下代码以我的语言显示:

Print(message:"Hello stackoverflow")
Run Code Online (Sandbox Code Playgroud)

将产生以下 AST:

替代文字

我目前的想法是工厂类可以读取树,提取名称(message)和类型(STRING)值(“ Hello stackoverflow”)。现在,知道了类型,我可以实例化正确的类(例如 StringAttribute 类)并传入所需的属性数据 -namevalue.

相同的方法可用于定义工厂,提取定义名称 ( Print),实例化 Print 类,然后传入从属性工厂生成的属性。

使用更复杂的程序,事情确实变得更复杂了:

Program(args:[1,2,3,4,5])
{
    If(isTrue:IsInArray(array:{Program.args} value:5))
    {
        Then {
            Print(message:"5 is in the array")
        } Else {
            Print(message:"More complex " + "message")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

替代文字

非常欢迎任何/所有帮助或想法。非常感谢。

我以前的相关问题(可能有用):

  1. 我如何制作树解析器
  2. 解决LL递归问题
  3. Antrl3 条件树重写

java antlr execution abstract-syntax-tree

5
推荐指数
1
解决办法
3418
查看次数

标签 统计

abstract-syntax-tree ×1

antlr ×1

execution ×1

java ×1