#ifndef VISITOR_H
#define VISITOR_H

enum node_type
{
    // 0 operand
    NUM,

    // 1 operand
    POS,
    NEG,

    // 2 operands
    ADD,
    SUB,
    MUL,
    DIV,
    MOD,
};

struct ast_node
{
    int value;
    enum node_type type;
    struct ast_node *children;
};

typedef void(*visitor)(struct ast_node *);

void visit(struct ast_node *node, visitor v);

void print_prefix(struct ast_node *node);
void print_infix(struct ast_node *node);
void print_suffix(struct ast_node *node);

#endif /* ! VISITOR_H */
