@define domatch(e) { switch(e){ @match #id('x): printf("matched x!\n"); break; @match #add(x, y): printf("matched add!\n"); break; @match #sub(x, y): printf("matched sub!\n"); break; default: printf("no match\n"); break; } } domatch(#id('x)); domatch(#id('y)); domatch(#add(#id('x), #id('y))); domatch(#sub(#id('x), #id('y)));