Version 0.10.1 (????-??-??)
---------------------------
+- Applied #1438160 expose YYCTXMARKER.
Version 0.10.0 (2006-02-18)
---------------------------
if (back != 0u)
{
- o << indent(ind) << "YYCURSOR = yyctxmarker;\n";
+ o << indent(ind) << "YYCURSOR = YYCTXMARKER;\n";
}
RuleLine rl(*rule);
}
if (isPreCtxt)
{
- o << indent(ind) << "yyctxmarker = YYCURSOR + 1;\n";
- bUsedCtxMarker = true;
+ o << indent(ind) << "YYCTXMARKER = YYCURSOR + 1;\n";
}
action->emit(o, ind, readCh);
}
o << indent(ind++) << "{\n\n";
}
- if (bUsedCtxMarker)
- {
- o << indent(ind) << "YYCTYPE *yyctxmarker = YYCURSOR;\n";
- }
-
if (hasFillLabels == true)
{
vUsedLabels.insert(start_label);
extern bool wFlag;
extern bool bUsedYYAccept;
-extern bool bUsedCtxMarker;
extern bool bUseStartLabel;
extern std::string startLabelName;
extern uint maxFill;
<dt>YYMARKER</dt>
<dd><i>l</i>-expression of type *YYCTYPE. The generated code saves backtracking
information in YYMARKER.<br /><br /></dd>
+<dt>YYCTXMARKER</dt>
+<dd><i>l</i>-expression of type *YYCTYPE. The generated code saves context backtracking
+information in YYCTXMARKER.<br /><br /></dd>
<dt>YYFILL(<i>n</i>)</dt>
<dd>The generated code "calls" YYFILL when the buffer needs (re)filling: at
least <i>n</i> additional characters should be provided. YYFILL should adjust
-YYCURSOR, YYLIMIT and YYMARKER as needed. Note that for typical programming
+YYCURSOR, YYLIMIT, YYMARKER and YYCTXMARKER as needed. Note that for typical programming
languages <i>n</i> will be the length of the longest keyword plus one.<br /><br /></dd>
<dt>YYGETSTATE()</dt>
<dd>The user only needs to define this macro if the <b>-f</b> flag was
specification for each start condition (as illustrated in the above example).
<a name="lbAL" id="lbAL"> </a></p>
<h2>BUGS</h2>
-<p>Only fixed length trailing context can be handled.</p>
<p>Difference only works for character sets.</p>
<p>The <b>re2c</b> internal algorithms need documentation.</p>
<a name="lbAM" id="lbAM"> </a>
bool wFlag = false;
bool bUsedYYAccept = false;
-bool bUsedCtxMarker= false;
bool bUseStartLabel= false;
std::string startLabelName;
uint maxFill = 1;
.ds rx regular expression
.ds lx \fIl\fP-expression
\"$Log$
+\"Revision 1.40 2006/02/24 21:16:17 helly
+\"- Applied #1438160 expose YYCTXMARKER.
+\"
\"Revision 1.39 2006/01/21 15:51:02 helly
\"- Generic fix for oline generation (by providing specialized ostream whose
\" stream_buffer count '\n's)
\*(lx of type \fC*YYCTYPE\fP.
The generated code saves backtracking information in \fCYYMARKER\fP.
.TP
+\fCYYCTXMARKER\fP
+\*(lx of type \fC*YYCTYPE\fP.
+The generated code saves trailing context backtracking information in \fCYYCTXMARKER\fP.
+The user only needs to define this macro if a scanner specification uses trailing
+context in one or more of its regular expressions.
+.TP
\fCYYFILL(\fP\fIn\fP\fC)\fP
The generated code "calls" \fCYYFILL\fP when the buffer needs
(re)filling: at least \fIn\fP additional characters should
char *cur;
char *lim;
char *ptr;
+ char *ctx;
char *tok;
};
#define YYCURSOR s.cur
#define YYLIMIT s.lim
#define YYMARKER s.ptr
+#define YYCTXMARKER s.ctx
#define YYFILL(n)
enum What
0, 0, 0, 0, 0, 0, 0, 0,
};
-#line 83 "<stdout>"
+#line 85 "<stdout>"
{
YYCTYPE yych;
- YYCTYPE *yyctxmarker = YYCURSOR;
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
if(yych >= 'c') goto yy9;
}
}
- yyctxmarker = YYCURSOR + 1;
+ YYCTXMARKER = YYCURSOR + 1;
++YYCURSOR;
if((yych = *YYCURSOR) <= '/') goto yy3;
if(yych == '1') goto yy15;
if(yych <= '9') goto yy12;
yy3:
-#line 58 "ctx.b.re"
+#line 60 "ctx.b.re"
{
return UNEXPECTED;
}
-#line 118 "<stdout>"
+#line 119 "<stdout>"
yy4:
++YYCURSOR;
yych = *YYCURSOR;
goto yy11;
yy5:
-#line 48 "ctx.b.re"
+#line 50 "ctx.b.re"
{ return NUMBER; }
-#line 126 "<stdout>"
+#line 127 "<stdout>"
yy6:
++YYCURSOR;
yy7:
-#line 51 "ctx.b.re"
+#line 53 "ctx.b.re"
{
if(s.cur == s.lim)
return EOI;
cursor = s.cur;
goto std;
}
-#line 137 "<stdout>"
+#line 138 "<stdout>"
yy8:
yych = *++YYCURSOR;
goto yy7;
if(yych <= '/') goto yy14;
if(yych <= '9') goto yy12;
yy14:
- YYCURSOR = yyctxmarker;
-#line 47 "ctx.b.re"
+ YYCURSOR = YYCTXMARKER;
+#line 49 "ctx.b.re"
{ return KEYWORD; }
-#line 163 "<stdout>"
+#line 164 "<stdout>"
yy15:
++YYCURSOR;
if((yych = *YYCURSOR) <= '/') goto yy16;
if(yych <= '9') goto yy12;
yy16:
- YYCURSOR = yyctxmarker;
-#line 46 "ctx.b.re"
+ YYCURSOR = YYCTXMARKER;
+#line 48 "ctx.b.re"
{ return KEYWORD; }
-#line 172 "<stdout>"
+#line 173 "<stdout>"
}
}
-#line 61 "ctx.b.re"
+#line 63 "ctx.b.re"
}
char *cur;
char *lim;
char *ptr;
+ char *ctx;
char *tok;
};
#define YYCURSOR s.cur
#define YYLIMIT s.lim
#define YYMARKER s.ptr
+#define YYCTXMARKER s.ctx
#define YYFILL(n)
enum What
char *cur;
char *lim;
char *ptr;
+ char *ctx;
char *tok;
};
#define YYCURSOR s.cur
#define YYLIMIT s.lim
#define YYMARKER s.ptr
+#define YYCTXMARKER s.ctx
#define YYFILL(n)
enum What
s.tok = cursor;
-#line 48 "<stdout>"
+#line 50 "<stdout>"
{
YYCTYPE yych;
- YYCTYPE *yyctxmarker = YYCURSOR;
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
default: goto yy9;
}
yy2:
- yyctxmarker = YYCURSOR + 1;
+ YYCTXMARKER = YYCURSOR + 1;
++YYCURSOR;
switch((yych = *YYCURSOR)) {
case '0':
default: goto yy3;
}
yy3:
-#line 58 "ctx.re"
+#line 60 "ctx.re"
{
return UNEXPECTED;
}
-#line 94 "<stdout>"
+#line 95 "<stdout>"
yy4:
++YYCURSOR;
yych = *YYCURSOR;
goto yy11;
yy5:
-#line 48 "ctx.re"
+#line 50 "ctx.re"
{ return NUMBER; }
-#line 102 "<stdout>"
+#line 103 "<stdout>"
yy6:
++YYCURSOR;
yy7:
-#line 51 "ctx.re"
+#line 53 "ctx.re"
{
if(s.cur == s.lim)
return EOI;
cursor = s.cur;
goto std;
}
-#line 113 "<stdout>"
+#line 114 "<stdout>"
yy8:
yych = *++YYCURSOR;
goto yy7;
default: goto yy14;
}
yy14:
- YYCURSOR = yyctxmarker;
-#line 47 "ctx.re"
+ YYCURSOR = YYCTXMARKER;
+#line 49 "ctx.re"
{ return KEYWORD; }
-#line 159 "<stdout>"
+#line 160 "<stdout>"
yy15:
++YYCURSOR;
switch((yych = *YYCURSOR)) {
default: goto yy16;
}
yy16:
- YYCURSOR = yyctxmarker;
-#line 46 "ctx.re"
+ YYCURSOR = YYCTXMARKER;
+#line 48 "ctx.re"
{ return KEYWORD; }
-#line 179 "<stdout>"
+#line 180 "<stdout>"
}
-#line 61 "ctx.re"
+#line 63 "ctx.re"
}
char *cur;
char *lim;
char *ptr;
+ char *ctx;
char *tok;
};
#define YYCURSOR s.cur
#define YYLIMIT s.lim
#define YYMARKER s.ptr
+#define YYCTXMARKER s.ctx
#define YYFILL(n)
enum What
char *cur;
char *lim;
char *ptr;
+ char *ctx;
char *tok;
};
#define YYCURSOR s.cur
#define YYLIMIT s.lim
#define YYMARKER s.ptr
+#define YYCTXMARKER s.ctx
#define YYFILL(n)
enum What
s.tok = cursor;
-#line 48 "<stdout>"
+#line 50 "<stdout>"
{
YYCTYPE yych;
- YYCTYPE *yyctxmarker = YYCURSOR;
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
if(yych >= 'c') goto yy9;
}
}
- yyctxmarker = YYCURSOR + 1;
+ YYCTXMARKER = YYCURSOR + 1;
++YYCURSOR;
if((yych = *YYCURSOR) <= '/') goto yy3;
if(yych == '1') goto yy15;
if(yych <= '9') goto yy12;
yy3:
-#line 58 "ctx.s.re"
+#line 60 "ctx.s.re"
{
return UNEXPECTED;
}
-#line 83 "<stdout>"
+#line 84 "<stdout>"
yy4:
++YYCURSOR;
yych = *YYCURSOR;
goto yy11;
yy5:
-#line 48 "ctx.s.re"
+#line 50 "ctx.s.re"
{ return NUMBER; }
-#line 91 "<stdout>"
+#line 92 "<stdout>"
yy6:
++YYCURSOR;
yy7:
-#line 51 "ctx.s.re"
+#line 53 "ctx.s.re"
{
if(s.cur == s.lim)
return EOI;
cursor = s.cur;
goto std;
}
-#line 102 "<stdout>"
+#line 103 "<stdout>"
yy8:
yych = *++YYCURSOR;
goto yy7;
if(yych <= '/') goto yy14;
if(yych <= '9') goto yy12;
yy14:
- YYCURSOR = yyctxmarker;
-#line 47 "ctx.s.re"
+ YYCURSOR = YYCTXMARKER;
+#line 49 "ctx.s.re"
{ return KEYWORD; }
-#line 127 "<stdout>"
+#line 128 "<stdout>"
yy15:
++YYCURSOR;
if((yych = *YYCURSOR) <= '/') goto yy16;
if(yych <= '9') goto yy12;
yy16:
- YYCURSOR = yyctxmarker;
-#line 46 "ctx.s.re"
+ YYCURSOR = YYCTXMARKER;
+#line 48 "ctx.s.re"
{ return KEYWORD; }
-#line 136 "<stdout>"
+#line 137 "<stdout>"
}
-#line 61 "ctx.s.re"
+#line 63 "ctx.s.re"
}
char *cur;
char *lim;
char *ptr;
+ char *ctx;
char *tok;
};
#define YYCURSOR s.cur
#define YYLIMIT s.lim
#define YYMARKER s.ptr
+#define YYCTXMARKER s.ctx
#define YYFILL(n)
enum What
#define YYCURSOR cursor
#define YYLIMIT s->lim
#define YYMARKER s->ptr
+#define YYCTXMARKER s->ctx
#define YYFILL {cursor = fill(s, cursor);}
#define RETURN(i) {s->cur = cursor; return i;}
typedef struct Scanner {
int fd;
- uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof;
+ uchar *bot, *tok, *ptr, *ctx, *cur, *pos, *lim, *top, *eof;
uint line;
} Scanner;
uint depth;
std:
s->tok = cursor;
-#line 64 "modula.re"
+#line 65 "modula.re"
-#line 67 "<stdout>"
+#line 68 "<stdout>"
{
YYCTYPE yych;
unsigned int yyaccept = 0;
- YYCTYPE *yyctxmarker = YYCURSOR;
if((YYLIMIT - YYCURSOR) < 15) YYFILL(15);
yych = *YYCURSOR;
default: goto yy3;
}
yy3:
-#line 79 "modula.re"
+#line 80 "modula.re"
{RETURN(9);}
#line 176 "<stdout>"
yy4:
- yyctxmarker = YYCURSOR + 1;
+ YYCTXMARKER = YYCURSOR + 1;
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
goto yy292;
yy5:
-#line 69 "modula.re"
+#line 70 "modula.re"
{RETURN(1);}
#line 185 "<stdout>"
yy6:
- yyctxmarker = YYCURSOR + 1;
+ YYCTXMARKER = YYCURSOR + 1;
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
goto yy278;
default: goto yy274;
}
yy8:
-#line 158 "modula.re"
+#line 159 "modula.re"
{
printf("unexpected character: %c\n", *s->tok);
goto std;
}
yy10:
++YYCURSOR;
-#line 77 "modula.re"
+#line 78 "modula.re"
{RETURN(7);}
#line 216 "<stdout>"
yy12:
++YYCURSOR;
-#line 78 "modula.re"
+#line 79 "modula.re"
{RETURN(8);}
#line 221 "<stdout>"
yy14:
++YYCURSOR;
-#line 80 "modula.re"
+#line 81 "modula.re"
{RETURN(10);}
#line 226 "<stdout>"
yy16:
++YYCURSOR;
-#line 81 "modula.re"
+#line 82 "modula.re"
{RETURN(11);}
#line 231 "<stdout>"
yy18:
++YYCURSOR;
-#line 82 "modula.re"
+#line 83 "modula.re"
{RETURN(12);}
#line 236 "<stdout>"
yy20:
++YYCURSOR;
-#line 83 "modula.re"
+#line 84 "modula.re"
{RETURN(13);}
#line 241 "<stdout>"
yy22:
++YYCURSOR;
-#line 84 "modula.re"
+#line 85 "modula.re"
{RETURN(14);}
#line 246 "<stdout>"
yy24:
default: goto yy25;
}
yy25:
-#line 85 "modula.re"
+#line 86 "modula.re"
{RETURN(15);}
#line 256 "<stdout>"
yy26:
++YYCURSOR;
-#line 87 "modula.re"
+#line 88 "modula.re"
{RETURN(17);}
#line 261 "<stdout>"
yy28:
default: goto yy29;
}
yy29:
-#line 88 "modula.re"
+#line 89 "modula.re"
{RETURN(18);}
#line 271 "<stdout>"
yy30:
++YYCURSOR;
-#line 90 "modula.re"
+#line 91 "modula.re"
{RETURN(20);}
#line 276 "<stdout>"
yy32:
default: goto yy33;
}
yy33:
-#line 91 "modula.re"
+#line 92 "modula.re"
{RETURN(21);}
#line 287 "<stdout>"
yy34:
++YYCURSOR;
-#line 94 "modula.re"
+#line 95 "modula.re"
{RETURN(24);}
#line 292 "<stdout>"
yy36:
default: goto yy37;
}
yy37:
-#line 95 "modula.re"
+#line 96 "modula.re"
{RETURN(25);}
#line 302 "<stdout>"
yy38:
++YYCURSOR;
-#line 97 "modula.re"
+#line 98 "modula.re"
{RETURN(27);}
#line 307 "<stdout>"
yy40:
++YYCURSOR;
-#line 98 "modula.re"
+#line 99 "modula.re"
{RETURN(28);}
#line 312 "<stdout>"
yy42:
++YYCURSOR;
-#line 99 "modula.re"
+#line 100 "modula.re"
{RETURN(29);}
#line 317 "<stdout>"
yy44:
++YYCURSOR;
-#line 100 "modula.re"
+#line 101 "modula.re"
{RETURN(30);}
#line 322 "<stdout>"
yy46:
++YYCURSOR;
-#line 101 "modula.re"
+#line 102 "modula.re"
{RETURN(31);}
#line 327 "<stdout>"
yy48:
++YYCURSOR;
-#line 102 "modula.re"
+#line 103 "modula.re"
{RETURN(32);}
#line 332 "<stdout>"
yy50:
++YYCURSOR;
-#line 103 "modula.re"
+#line 104 "modula.re"
{RETURN(33);}
#line 337 "<stdout>"
yy52:
default: goto yy81;
}
yy53:
-#line 146 "modula.re"
+#line 147 "modula.re"
{RETURN(74);}
#line 348 "<stdout>"
yy54:
yych = *YYCURSOR;
goto yy79;
yy74:
-#line 148 "modula.re"
+#line 149 "modula.re"
{ goto std; }
#line 481 "<stdout>"
yy75:
++YYCURSOR;
-#line 151 "modula.re"
+#line 152 "modula.re"
{
if(cursor == s->eof) RETURN(0);
s->pos = cursor; s->line++;
default: goto yy86;
}
yy86:
-#line 144 "modula.re"
+#line 145 "modula.re"
{RETURN(73);}
#line 662 "<stdout>"
yy87:
default: goto yy90;
}
yy90:
-#line 143 "modula.re"
+#line 144 "modula.re"
{RETURN(72);}
#line 745 "<stdout>"
yy91:
default: goto yy93;
}
yy93:
-#line 142 "modula.re"
+#line 143 "modula.re"
{RETURN(71);}
#line 822 "<stdout>"
yy94:
default: goto yy98;
}
yy98:
-#line 141 "modula.re"
+#line 142 "modula.re"
{RETURN(70);}
#line 911 "<stdout>"
yy99:
default: goto yy101;
}
yy101:
-#line 139 "modula.re"
+#line 140 "modula.re"
{RETURN(68);}
#line 988 "<stdout>"
yy102:
default: goto yy105;
}
yy105:
-#line 140 "modula.re"
+#line 141 "modula.re"
{RETURN(69);}
#line 1071 "<stdout>"
yy106:
default: goto yy108;
}
yy108:
-#line 138 "modula.re"
+#line 139 "modula.re"
{RETURN(67);}
#line 1148 "<stdout>"
yy109:
default: goto yy111;
}
yy111:
-#line 137 "modula.re"
+#line 138 "modula.re"
{RETURN(66);}
#line 1225 "<stdout>"
yy112:
default: goto yy119;
}
yy119:
-#line 136 "modula.re"
+#line 137 "modula.re"
{RETURN(65);}
#line 1334 "<stdout>"
yy120:
default: goto yy123;
}
yy123:
-#line 135 "modula.re"
+#line 136 "modula.re"
{RETURN(64);}
#line 1417 "<stdout>"
yy124:
default: goto yy127;
}
yy127:
-#line 134 "modula.re"
+#line 135 "modula.re"
{RETURN(63);}
#line 1500 "<stdout>"
yy128:
default: goto yy136;
}
yy136:
-#line 133 "modula.re"
+#line 134 "modula.re"
{RETURN(62);}
#line 1613 "<stdout>"
yy137:
default: goto yy146;
}
yy146:
-#line 132 "modula.re"
+#line 133 "modula.re"
{RETURN(61);}
#line 1732 "<stdout>"
yy147:
default: goto yy152;
}
yy152:
-#line 131 "modula.re"
+#line 132 "modula.re"
{RETURN(60);}
#line 1827 "<stdout>"
yy153:
default: goto yy154;
}
yy154:
-#line 129 "modula.re"
+#line 130 "modula.re"
{RETURN(58);}
#line 1898 "<stdout>"
yy155:
default: goto yy156;
}
yy156:
-#line 130 "modula.re"
+#line 131 "modula.re"
{RETURN(59);}
#line 1969 "<stdout>"
yy157:
default: goto yy159;
}
yy159:
-#line 128 "modula.re"
+#line 129 "modula.re"
{RETURN(57);}
#line 2046 "<stdout>"
yy160:
default: goto yy162;
}
yy162:
-#line 126 "modula.re"
+#line 127 "modula.re"
{RETURN(55);}
#line 2123 "<stdout>"
yy163:
default: goto yy166;
}
yy166:
-#line 127 "modula.re"
+#line 128 "modula.re"
{RETURN(56);}
#line 2206 "<stdout>"
yy167:
default: goto yy170;
}
yy170:
-#line 125 "modula.re"
+#line 126 "modula.re"
{RETURN(54);}
#line 2289 "<stdout>"
yy171:
default: goto yy172;
}
yy172:
-#line 121 "modula.re"
+#line 122 "modula.re"
{RETURN(50);}
#line 2360 "<stdout>"
yy173:
default: goto yy175;
}
yy175:
-#line 124 "modula.re"
+#line 125 "modula.re"
{RETURN(53);}
#line 2437 "<stdout>"
yy176:
default: goto yy181;
}
yy181:
-#line 123 "modula.re"
+#line 124 "modula.re"
{RETURN(52);}
#line 2533 "<stdout>"
yy182:
default: goto yy192;
}
yy192:
-#line 122 "modula.re"
+#line 123 "modula.re"
{RETURN(51);}
#line 2658 "<stdout>"
yy193:
default: goto yy197;
}
yy197:
-#line 120 "modula.re"
+#line 121 "modula.re"
{RETURN(49);}
#line 2747 "<stdout>"
yy198:
default: goto yy199;
}
yy199:
-#line 119 "modula.re"
+#line 120 "modula.re"
{RETURN(48);}
#line 2818 "<stdout>"
yy200:
default: goto yy208;
}
yy208:
-#line 118 "modula.re"
+#line 119 "modula.re"
{RETURN(47);}
#line 2932 "<stdout>"
yy209:
default: goto yy210;
}
yy210:
-#line 117 "modula.re"
+#line 118 "modula.re"
{RETURN(46);}
#line 3003 "<stdout>"
yy211:
default: goto yy212;
}
yy212:
-#line 116 "modula.re"
+#line 117 "modula.re"
{RETURN(45);}
#line 3074 "<stdout>"
yy213:
default: goto yy215;
}
yy215:
-#line 114 "modula.re"
+#line 115 "modula.re"
{RETURN(43);}
#line 3152 "<stdout>"
yy216:
default: goto yy218;
}
yy218:
-#line 115 "modula.re"
+#line 116 "modula.re"
{RETURN(44);}
#line 3229 "<stdout>"
yy219:
default: goto yy222;
}
yy222:
-#line 113 "modula.re"
+#line 114 "modula.re"
{RETURN(42);}
#line 3312 "<stdout>"
yy223:
default: goto yy224;
}
yy224:
-#line 112 "modula.re"
+#line 113 "modula.re"
{RETURN(41);}
#line 3383 "<stdout>"
yy225:
default: goto yy233;
}
yy233:
-#line 111 "modula.re"
+#line 112 "modula.re"
{RETURN(40);}
#line 3496 "<stdout>"
yy234:
default: goto yy239;
}
yy239:
-#line 110 "modula.re"
+#line 111 "modula.re"
{RETURN(39);}
#line 3591 "<stdout>"
yy240:
default: goto yy242;
}
yy242:
-#line 109 "modula.re"
+#line 110 "modula.re"
{RETURN(38);}
#line 3668 "<stdout>"
yy243:
default: goto yy245;
}
yy245:
-#line 108 "modula.re"
+#line 109 "modula.re"
{RETURN(37);}
#line 3745 "<stdout>"
yy246:
default: goto yy249;
}
yy249:
-#line 107 "modula.re"
+#line 108 "modula.re"
{RETURN(36);}
#line 3828 "<stdout>"
yy250:
default: goto yy255;
}
yy255:
-#line 106 "modula.re"
+#line 107 "modula.re"
{RETURN(35);}
#line 3923 "<stdout>"
yy256:
default: goto yy257;
}
yy257:
-#line 105 "modula.re"
+#line 106 "modula.re"
{RETURN(34);}
#line 3994 "<stdout>"
yy258:
++YYCURSOR;
-#line 96 "modula.re"
+#line 97 "modula.re"
{RETURN(26);}
#line 3999 "<stdout>"
yy260:
++YYCURSOR;
-#line 93 "modula.re"
+#line 94 "modula.re"
{RETURN(23);}
#line 4004 "<stdout>"
yy262:
++YYCURSOR;
-#line 92 "modula.re"
+#line 93 "modula.re"
{RETURN(22);}
#line 4009 "<stdout>"
yy264:
++YYCURSOR;
-#line 89 "modula.re"
+#line 90 "modula.re"
{RETURN(19);}
#line 4014 "<stdout>"
yy266:
++YYCURSOR;
-#line 86 "modula.re"
+#line 87 "modula.re"
{RETURN(16);}
#line 4019 "<stdout>"
yy268:
}
yy271:
++YYCURSOR;
-#line 75 "modula.re"
+#line 76 "modula.re"
{RETURN(6);}
#line 4043 "<stdout>"
yy273:
default: goto yy286;
}
yy276:
-#line 74 "modula.re"
+#line 75 "modula.re"
{RETURN(5);}
#line 4064 "<stdout>"
yy277:
- yyctxmarker = YYCURSOR + 1;
+ YYCTXMARKER = YYCURSOR + 1;
yyaccept = 0;
YYMARKER = ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
}
yy281:
++YYCURSOR;
-#line 73 "modula.re"
+#line 74 "modula.re"
{RETURN(4);}
#line 4121 "<stdout>"
yy283:
++YYCURSOR;
- YYCURSOR = yyctxmarker;
-#line 70 "modula.re"
+ YYCURSOR = YYCTXMARKER;
+#line 71 "modula.re"
{RETURN(1);}
#line 4127 "<stdout>"
yy285:
default: goto yy276;
}
yy291:
- yyctxmarker = YYCURSOR + 1;
+ YYCTXMARKER = YYCURSOR + 1;
yyaccept = 0;
YYMARKER = ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
default: goto yy294;
}
yy294:
-#line 71 "modula.re"
+#line 72 "modula.re"
{RETURN(2);}
#line 4251 "<stdout>"
yy295:
default: goto yy296;
}
yy296:
-#line 72 "modula.re"
+#line 73 "modula.re"
{RETURN(3);}
#line 4278 "<stdout>"
yy297:
++YYCURSOR;
-#line 67 "modula.re"
+#line 68 "modula.re"
{ depth = 1; goto comment; }
#line 4283 "<stdout>"
}
-#line 162 "modula.re"
+#line 163 "modula.re"
comment:
#line 4289 "<stdout>"
{
YYCTYPE yych;
- YYCTYPE *yyctxmarker = YYCURSOR;
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
switch(yych){
default: goto yy302;
}
yy302:
-#line 179 "modula.re"
+#line 180 "modula.re"
{ goto comment; }
-#line 4310 "<stdout>"
+#line 4309 "<stdout>"
yy303:
yych = *++YYCURSOR;
switch(yych){
}
yy304:
++YYCURSOR;
-#line 174 "modula.re"
+#line 175 "modula.re"
{
if(cursor == s->eof) RETURN(0);
s->tok = s->pos = cursor; s->line++;
goto comment;
}
-#line 4325 "<stdout>"
+#line 4324 "<stdout>"
yy306:
yych = *++YYCURSOR;
goto yy302;
yy307:
++YYCURSOR;
-#line 172 "modula.re"
+#line 173 "modula.re"
{ ++depth; goto comment; }
-#line 4333 "<stdout>"
+#line 4332 "<stdout>"
yy309:
++YYCURSOR;
-#line 166 "modula.re"
+#line 167 "modula.re"
{
if(--depth == 0)
goto std;
else
goto comment;
}
-#line 4343 "<stdout>"
+#line 4342 "<stdout>"
}
-#line 180 "modula.re"
+#line 181 "modula.re"
}
#define YYCURSOR cursor
#define YYLIMIT s->lim
#define YYMARKER s->ptr
+#define YYCTXMARKER s->ctx
#define YYFILL {cursor = fill(s, cursor);}
#define RETURN(i) {s->cur = cursor; return i;}
typedef struct Scanner {
int fd;
- uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof;
+ uchar *bot, *tok, *ptr, *ctx, *cur, *pos, *lim, *top, *eof;
uint line;
} Scanner;