我正在为 go 中的自定义语言编写解析器。我的问题是语法树上的每个节点都根据其类型(无论是 anif
或 avariableDef
或 a funcDef
)而不同,因此具有不同的值,但我需要有可以指向其中任何一个的指针,以赋予它树状功能.
有人建议使用interface
, 类似于describe
描述节点的方法(依赖于实现),但问题是它会根据节点返回不同的东西。(AfuncDef
会给出args []variableDef
and body []node
,但 if 会给出cond bin
and body []node
,而变量 def 会给出type typ
and name string
)
我最初是用 JS 编写的,并利用 JSON 的灵活性来发挥我的优势。我听说 Go 有内置的 JSON 支持,但我不认为我想走这条路。