void print_emails(estring fname) {
estring file_contents = es_read_file(fname);
estring grammar = es(
"EMAIL = NAME '@' LOCATION || PREFIX '<' NAME '@' DOMAIN '>'"
"*NAME = [CHARS - @]"
"*DOMAIN = CHARS"
"PREFIX = [CHARS - <]"
);
egnode node = grammar_quick_parse(grammar, file_contents);
ehash h = new_ehash();
while(node != NULL) {
estring username = eslower(node->match); eg_next_node(node);
estring domain = eslower(node->match); eg_next_node(node);
h.setdefault(domain, new_earray()).append(username);
}
// Print it out
for(ehash_iter(h);!ehash_iter_done(h);ehash_iter_next(h)){
printf("%s [",ehash_iter_key(h));
earray a = ehash_iter_val(h);
earray_sort_in_place(a);
for(int i = 0; i<earray_size(a); i++) {
printf("'%s', ", earray_get(a, i);
}
printf("]\n");
}
}