func NewArithExpr(opTypeStr string, lhs ast.Node, rhs ast.Node) (ast.Node, error) { var opTypes = map[string]ast.BinOpType{ "+": ast.ADD, "-": ast.SUB, "*": ast.MUL, "/": ast.DIV, "%": ast.MOD, ">": ast.GT, "<": ast.LT, "==": ast.EQ, "!=": ast.NE, ">=": ast.GE, "<=": ast.LE, "AND": ast.AND, "OR": ast.OR, } opType, ok := opTypes[opTypeStr] if !ok { return nil, fmt.Errorf("Invalid binary operator \"%v\"", opTypeStr) } expr, err := ast.NewArithExpr(opType, lhs, rhs) if err != nil { return nil, fmt.Errorf(err.Error()) } return expr, nil }
// NewArithExpr is a convenience function to create a new AST arithmetic expression. func NewArithExpr(opTypeStr string, lhs ast.Node, rhs ast.Node) (ast.Node, error) { var opTypes = map[string]ast.BinOpType{ "+": ast.Add, "-": ast.Sub, "*": ast.Mul, "/": ast.Div, "%": ast.Mod, ">": ast.GT, "<": ast.LT, "==": ast.EQ, "!=": ast.NE, ">=": ast.GE, "<=": ast.LE, "AND": ast.And, "OR": ast.Or, } opType, ok := opTypes[opTypeStr] if !ok { return nil, fmt.Errorf("invalid binary operator %q", opTypeStr) } expr, err := ast.NewArithExpr(opType, lhs, rhs) if err != nil { return nil, fmt.Errorf(err.Error()) } return expr, nil }