我目前正在考虑如何最好地将使用 Antlr 生成的 AST 转换为可以在我的程序中使用的有用对象。
我的语法(除了学习)的目的是创建一种可执行的(运行时解释的)语言。
例如,我将如何获取一个属性子树并实例化一个特定的 Attribute 类。例如
以下代码用我的语言编写:
Print(message:"Hello stackoverflow")
将产生以下 AST:
我目前的想法是工厂类可以读取树,提取名称(message
)和类型(STRING
)值(“ Hello stackoverflow
”)。现在,知道了类型,我可以实例化正确的类(例如 StringAttribute 类)并传入所需的属性数据 -name
和value
。
相同的方法可以用于定义工厂,提取定义名称 ( 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")
}
}
}
非常欢迎任何/所有帮助或想法。非常感谢。
我以前的相关问题(可能有用):