1// re2c $INPUT -o $OUTPUT -fs 2uint32_t push() 3{ 4 // The scanner starts here 5 #define YYLIMIT limit 6 #define YYCURSOR cursor 7 #define YYMARKER marker 8 #define YYCTYPE uint8_t 9 10 #define SKIP(x) { start = cursor; goto yy0; } 11 #define SEND(x) { send(x); SKIP(); } 12 #define YYFILL(n) { goto fill; } 13 14 #define YYGETSTATE() state 15 #define YYSETSTATE(x) { state = (x); } 16 17start: 18 19 /*!re2c 20 re2c:startlabel = 1; 21 eol = "\n"; 22 eof = "\000"; 23 digit = [0-9]; 24 integer = digit+; 25 alpha = [A-Za-z_]; 26 any = [\000-\377]; 27 space = [ \h\t\v\f\r]; 28 29 "if" { SEND(kIf); } 30 "for" { SEND(kFor); } 31 "else" { SEND(kElse); } 32 "goto" { SEND(kGoto); } 33 "break" { SEND(kBreak); } 34 "while" { SEND(kWhile); } 35 "return" { SEND(kReturn); } 36 alpha (alpha|digit)* { SEND(kIdentifier); } 37 integer { SEND(kDecimalConstant);} 38 39 "=" { SEND(kEqual); } 40 "(" { SEND(kLeftParen); } 41 ")" { SEND(kRightParen); } 42 "-" { SEND(kMinus); } 43 "+" { SEND(kPlus); } 44 "*" { SEND(kStar); } 45 "/" { SEND(kSlash); } 46 47 eol { SKIP(); } 48 space { SKIP(); } 49 eof { send(kEOF); return 1; } 50 any { SEND(kUnknown); } 51 */ 52 53fill: 54 return 0; 55} 56