+ re2c:indent:top = 2;
+ re2c:define:YYCTYPE = "unsigned char";
+ re2c:define:YYCURSOR = cur;
+ re2c:define:YYLIMIT = lim;
+ re2c:define:YYMARKER = mrk;
+ re2c:define:YYCTXMARKER = ctxmrk;
+ re2c:define:YYFILL = "if (cur >= lim) goto done;";
+ re2c:yyfill:parameter = 0;
+
+ W = [a-zA-Z0-9_\x80-\xff];
+ SP = [ \t];
+ EOL = [\r\n];
+ NAME = [a-zA-Z_\x80-\xff]W*;
+ NSNAME = (NAME)? ("\\" NAME)+;
+ DOLLAR_NAME = '$' W+;
+ QUOTED_STRING = "L"? "\"" ([^"])+ "\"";
+ QUOTED_CHAR = "L"? "'" ([^']+ "\\'"?)+ "'";
+ CPP_HEADER = "<" [-._/a-zA-Z0-9]+ ">";
+ CPP_ATTRIBUTE = "__attribute__" W* "((";
+ CPP_PRAGMA_ONCE = "pragma" W+ "once";
+
+ DEC_CONST = [1-9] [0-9]*;
+ OCT_CONST = "0" [0-7]*;
+ HEX_CONST = '0x' [0-9a-fA-F]+;
+ INT_CONST = (DEC_CONST | OCT_CONST | HEX_CONST);
+ INT_SUFFIX = 'u'('l' 'l'? )? | 'l'('l'? 'u')?;
+ INT_NUMBER = (DEC_CONST | OCT_CONST | HEX_CONST) INT_SUFFIX?;
+
+ FLT_HEX_FRAC = [0-9a-fA-F]*;
+ FLT_HEX_SIG = HEX_CONST ("." FLT_HEX_FRAC)?;
+ FLT_HEX_EXPO = 'p' [+-]? [0-9]+;
+ FLT_HEX_CONST = FLT_HEX_SIG FLT_HEX_EXPO;
+ FLT_DEC_NUM = "0" | DEC_CONST;
+ FLT_DEC_FRAC = [0-9]*;
+ FLT_DEC_SIG = FLT_DEC_NUM ("." FLT_DEC_FRAC)?;
+ FLT_DEC_EXPO = 'e' [+-]? [0-9]+;
+ FLT_DEC_CONST = (FLT_DEC_SIG FLT_DEC_EXPO) | (FLT_DEC_NUM "." FLT_DEC_FRAC) | ("." [0-9]+);
+ FLT_CONST = (FLT_DEC_CONST | FLT_HEX_CONST);
+ FLT_SUFFIX = 'f' | 'l' | ('d' ('f' | 'd' | 'l'));
+ FLT_NUMBER = (FLT_DEC_CONST | FLT_HEX_CONST) FLT_SUFFIX?;
+
+ [+-]? INT_CONST { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT; goto start; }
+ [+-]? INT_CONST / 'u' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_U; cur += 1; goto start; }
+ [+-]? INT_CONST / 'l' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_L; cur += 1; goto start; }
+ [+-]? INT_CONST / ('lu' | 'ul') { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_UL; cur += 2; goto start; }
+ [+-]? INT_CONST / ('llu' | 'ull') { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_ULL; cur += 3; goto start; }
+
+ [+-]? FLT_CONST { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT; goto start; }
+ [+-]? FLT_CONST / 'f' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_F; cur += 1; goto start; }
+ [+-]? FLT_CONST / 'l' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_L; cur += 1; goto start; }
+ [+-]? FLT_CONST / 'df' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DF; cur += 2; goto start; }
+ [+-]? FLT_CONST / 'dd' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DD; cur += 2; goto start; }
+ [+-]? FLT_CONST / 'dl' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DL; cur += 2; goto start; }
+