1{ 2#include <string.h> 3#include <stdio.h> 4#include <stdlib.h> 5char *xdup(char *s, char *e) { 6 char *ss = malloc( e - s + 2 ); 7 memcpy(ss, s, e-s); 8 ss[e-s] = 0; 9 return ss; 10} 11} 12 13translation_unit: statement*; 14 15statement 16 : expression ';' 17 { printf("(%s)expression ;(%s)", 18 xdup(d_ws_before(${parser}, &$n), $n.start_loc.s), 19 xdup($n.end, d_ws_after(${parser}, &$n))); 20 } 21 ; 22 23expression 24 : identifier '=' expression $right 1 25 { printf("(%s)= in expression(%s)", 26 xdup(d_ws_before(${parser}, &$n1), $n1.start_loc.s), 27 xdup($n1.end, d_ws_after(${parser}, &$n1))); 28 } 29 | integer 30 { printf("(%s)expression: integer(%s)", 31 xdup(d_ws_before(${parser}, &$n0), $n0.start_loc.s), 32 xdup($n0.end, d_ws_after(${parser}, &$n0))); 33 } 34 | expression '+' expression $right 2 35 { printf("(%s)+ in expression(%s)", 36 xdup(d_ws_before(${parser}, &$n1), $n1.start_loc.s), 37 xdup($n1.end, d_ws_after(${parser}, &$n1))); 38 } 39 ; 40 41integer: "-?([0-9]|0(x|X))[0-9]*(u|U|b|B|w|W|L|l)*" $term -1; 42identifier: "[a-zA-Z_][a-zA-Z_0-9]*" 43 { printf("(%s)identifier(%s)", 44 xdup(d_ws_before(${parser}, &$n0), $n0.start_loc.s), 45 xdup($n0.end, d_ws_after(${parser}, &$n0))); 46 } 47 ; 48