milly/include/pattern.h

55 lines
1.3 KiB
C

#include <stdbool.h>
enum pattern_form {
pattern_var,
pattern_int_lit,
pattern_bool_lit,
pattern_string_lit,
pattern_list_lit,
pattern_tuple_lit,
pattern_constructor,
};
struct pattern;
struct pattern_list {
struct pattern *elem;
struct pattern_list *next;
};
struct pattern_list_builder {
struct pattern_list *head;
struct pattern_list *last;
};
void pattern_list_append(struct pattern_list_builder *b, struct pattern *p);
void free_pattern_list(struct pattern_list *l);
struct constructor_pattern {
char *name;
struct pattern_list *args;
};
struct pattern {
enum pattern_form form;
union {
/* Useful for vars, ints and strings */
char *lexeme;
bool b;
struct pattern_list *list;
struct pattern_list *tuple;
struct constructor_pattern ctor;
};
};
struct pattern *make_var_pattern(char *name);
struct pattern *make_int_pattern(char *lexeme);
struct pattern *make_bool_pattern(bool b);
struct pattern *make_string_pattern(char *lexeme);
struct pattern *make_list_pattern(struct pattern_list *l);
struct pattern *make_tuple_pattern(struct pattern_list *l);
struct pattern *make_constructor_pattern(char *name, struct pattern_list *args);
void free_pattern(struct pattern *p);