Я пишу парсер для нестандартного языка в go. Моя проблема в том, что каждый узел в синтаксическом дереве отличается в зависимости от его типа (будь то if
, variableDef
или funcDef
) и, следовательно, имеет разные значения, но мне нужны указатели, которые могут указывать на любой из них, чтобы дать ему treei sh функциональность.
Кто-то предложил иметь interface
с чем-то вроде метода describe
(зависит от реализации), описывающего узел, но тогда проблема в что он будет возвращать разные вещи в зависимости от узла, которым он является. (A funcDef
даст args []variableDef
и body []node
, но if даст cond bin
и body []node
, а переменная def будет иметь type typ
и name string
)
Первоначально написал это в JS и использовал гибкость JSON в своих интересах. Я слышал, что Go имеет встроенную поддержку JSON, но я не думаю, что хочу go по этому маршруту.