%union{ struct { int x; int y; } loc; struct { int dx; int dy; } offset; } %token BEGIN_T EAST_T WEST_T NORTH_T SOUTH_T %type instr %type seq %% robot : seq {printf("Robot is at (%d,%d)\n",$1.x,$1.y);} ; seq : seq instr {$$.x=$1.x+$2.dx; $$.y=$1.y+$2.dy;} | BEGIN_T {$$.x=0;$$.y=0;} ; instr : EAST_T {$$.dx=1; $$.dy=0;} | WEST_T {$$.dx=-1; $$.dy=0;} | SOUTH_T {$$.dx=0; $$.dy=-1;} | NORTH_T {$$.dx=0; $$.dy=1;} ; %%