2 * flex equivalent to cppscan.rl
13 #define TK_NameSep 260
15 #define TK_PlusPlus 262
16 #define TK_MinusMinus 263
17 #define TK_ArrowStar 264
18 #define TK_DotStar 265
19 #define TK_ShiftLeft 266
20 #define TK_ShiftRight 267
21 #define TK_IntegerDecimal 268
22 #define TK_IntegerOctal 269
23 #define TK_IntegerHex 270
24 #define TK_EqualsEquals 271
25 #define TK_NotEquals 272
28 #define TK_MultAssign 275
29 #define TK_DivAssign 276
30 #define TK_PercentAssign 277
31 #define TK_PlusAssign 278
32 #define TK_MinusAssign 279
33 #define TK_AmpAssign 280
34 #define TK_CaretAssign 281
35 #define TK_BarAssign 282
36 #define TK_DotDotDot 283
37 #define TK_Whitespace 284
38 #define TK_Comment 285
40 int line = 1, col = 1;
42 void token( int tok, char *data, int len )
44 printf( "<%i> ", tok );
45 for ( int i = 0; i < len; i++ )
46 fputc( data[i], stdout );
47 fputc( '\n', stdout );
49 /* Count newlines and columns. This code is here mainly for having some
50 * code in the token routine when commenting out the above output during
51 * performance testing. */
52 for ( int i = 0; i < len; i ++ ) {
53 if ( data[i] == '\n' ) {
68 FRACT_CONST [0-9]*\.[0-9]+|[0-9]+\.
69 EXPONENT [eE][+\-]?[0-9]+
74 /* Single and double literals. */
75 L?\'([^\'\\\n]|\\.)*\' {
76 token( TK_Slit, yytext, yyleng );
79 L?\"([^\"\\\n]|\\.)*\" {
80 token( TK_Dlit, yytext, yyleng );
83 [a-zA-Z_][a-zA-Z0-9_]* {
84 token( TK_Id, yytext, yyleng );
87 {FRACT_CONST}{EXPONENT}?{FLOAT_SUFFIX}?|[0-9]+{EXPONENT}{FLOAT_SUFFIX}? {
88 token( TK_Float, yytext, yyleng );
91 (0|[1-9][0-9]*)[ulUL]{0,3} {
92 token( TK_IntegerDecimal, yytext, yyleng );
96 token( TK_IntegerOctal, yytext, yyleng );
99 0x[0-9a-fA-F]+[ulUL]{0,2} {
100 token( TK_IntegerHex, yytext, yyleng );
103 :: token( TK_NameSep, yytext, yyleng );
104 == token( TK_EqualsEquals, yytext, yyleng );
105 != token( TK_NotEquals, yytext, yyleng );
106 && token( TK_AndAnd, yytext, yyleng );
107 \|\| token( TK_OrOr, yytext, yyleng );
108 \*= token( TK_MultAssign, yytext, yyleng );
109 \/= token( TK_DivAssign, yytext, yyleng );
110 %= token( TK_PercentAssign, yytext, yyleng );
111 \+= token( TK_PlusAssign, yytext, yyleng );
112 -= token( TK_MinusAssign, yytext, yyleng );
113 &= token( TK_AmpAssign, yytext, yyleng );
114 ^= token( TK_CaretAssign, yytext, yyleng );
115 \|= token( TK_BarAssign, yytext, yyleng );
116 \+\+ token( TK_PlusPlus, yytext, yyleng );
117 -- token( TK_MinusMinus, yytext, yyleng );
118 -> token( TK_Arrow, yytext, yyleng );
119 ->\* token( TK_ArrowStar, yytext, yyleng );
120 \.\* token( TK_DotStar, yytext, yyleng );
121 \.\.\. token( TK_DotDotDot, yytext, yyleng );
124 <COMMENT>\*\/ BEGIN(INITIAL);
130 [!-/:-@\[-`{-~] token( yytext[0], yytext, yyleng );
136 /* Once the input is done, no more. */