func pushExpression(expression *parser.Node, table *SymbolTable) string { if expression == nil { panic("argument must not be nil") } if expression.Name != "expression" { panic(fmt.Sprintf("argument must be `expression`, but actual: %v", expression.ToXML())) } leftTerm, _ := expression.Find(&parser.Node{Name: "term"}) result := compileTerm(leftTerm, table) if len(expression.Children) > 1 { operator := expression.Children[1] expression.Children = expression.Children[2:] result += pushExpression(expression, table) result += compileOperator(operator.Value) } return result }