From: helly Date: Tue, 20 Feb 2007 17:21:49 +0000 (+0000) Subject: - Fix lessons to use unsgned char for -s/b X-Git-Tag: 0.13.6~239 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cfd02c4a6d672676740df272504e892039a3e1af;p=re2c - Fix lessons to use unsgned char for -s/b --- diff --git a/re2c/lessons/001_upn_calculator/calc_006.s.c b/re2c/lessons/001_upn_calculator/calc_006.s.c index 4c470e09..77919835 100755 --- a/re2c/lessons/001_upn_calculator/calc_006.s.c +++ b/re2c/lessons/001_upn_calculator/calc_006.s.c @@ -1,7 +1,7 @@ /* Generated by re2c */ #line 1 "calc_006.s.re" /* re2c lesson 001_upn_calculator, calc_006, (c) M. Boerger 2006 */ -#line 34 "calc_006.s.re" +#line 36 "calc_006.s.re" #include #include @@ -12,7 +12,7 @@ int stack[4]; int depth = 0; -int push_num(const char *t, const char *l, int radix) +int push_num(const unsigned char *t, const unsigned char *l, int radix) { int num = 0; @@ -24,7 +24,7 @@ int push_num(const char *t, const char *l, int radix) --t; while(++t < l) { - num = num * radix + (*t - '0'); + num = num * radix + (*t - (unsigned char)'0'); } DEBUG(printf("Num: %d\n", num)); @@ -54,11 +54,11 @@ int stack_sub() int scan(char *s) { - char *p = s; - char *t; + unsigned char *p = (unsigned char*)s; + unsigned char *t; int res = 0; -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR p while(!res) @@ -93,7 +93,7 @@ int scan(char *s) yych = *YYCURSOR; goto yy21; yy3: -#line 105 "calc_006.s.re" +#line 107 "calc_006.s.re" { continue; } #line 99 "" yy4: @@ -101,7 +101,7 @@ yy4: if((yych = *YYCURSOR) <= '/') goto yy5; if(yych <= '9') goto yy17; yy5: -#line 107 "calc_006.s.re" +#line 109 "calc_006.s.re" { res = push_num(t, p, 10); continue; } #line 107 "" yy6: @@ -109,22 +109,22 @@ yy6: goto yy16; yy7: ++YYCURSOR; -#line 108 "calc_006.s.re" +#line 110 "calc_006.s.re" { res = stack_add(); continue; } #line 115 "" yy9: ++YYCURSOR; -#line 109 "calc_006.s.re" +#line 111 "calc_006.s.re" { res = stack_sub(); continue; } #line 120 "" yy11: ++YYCURSOR; -#line 110 "calc_006.s.re" - { res = depth == 1 ? 0 : 2; continue; } +#line 112 "calc_006.s.re" + { res = depth == 1 ? 0 : 2; break; } #line 125 "" yy13: ++YYCURSOR; -#line 111 "calc_006.s.re" +#line 113 "calc_006.s.re" { res = 1; continue; } #line 130 "" yy15: @@ -140,7 +140,7 @@ yy17: if(yych <= '/') goto yy19; if(yych <= '9') goto yy17; yy19: -#line 106 "calc_006.s.re" +#line 108 "calc_006.s.re" { res = push_num(t, p, 8); continue; } #line 146 "" yy20: @@ -151,7 +151,7 @@ yy21: if(yych == ' ') goto yy20; goto yy3; } -#line 112 "calc_006.s.re" +#line 114 "calc_006.s.re" } return res; @@ -166,14 +166,15 @@ int main(int argc, char **argv) while(!res && ++argp < argc) { - inp = argv[argp]; + inp = strdup(argv[argp]); len = strlen(inp); if (inp[0] == '\"' && inp[len-1] == '\"') { + inp[len - 1] = '\0'; ++inp; - len -=2; } res = scan(inp); + free(inp); } switch(res) { diff --git a/re2c/lessons/001_upn_calculator/calc_006.s.re b/re2c/lessons/001_upn_calculator/calc_006.s.re index 6790bee4..d73b6b94 100755 --- a/re2c/lessons/001_upn_calculator/calc_006.s.re +++ b/re2c/lessons/001_upn_calculator/calc_006.s.re @@ -29,7 +29,9 @@ - optimizing the generated code by using -s command line switch of re2c . This tells re2c to generate code that uses if statements rather - then endless switch/case expressions where appropriate. + then endless switch/case expressions where appropriate. Note that the + generated code now requires the input to be unsigned char rather than char + due to the way comparisons are generated. */ #include @@ -41,7 +43,7 @@ int stack[4]; int depth = 0; -int push_num(const char *t, const char *l, int radix) +int push_num(const unsigned char *t, const unsigned char *l, int radix) { int num = 0; @@ -53,7 +55,7 @@ int push_num(const char *t, const char *l, int radix) --t; while(++t < l) { - num = num * radix + (*t - '0'); + num = num * radix + (*t - (unsigned char)'0'); } DEBUG(printf("Num: %d\n", num)); @@ -83,11 +85,11 @@ int stack_sub() int scan(char *s) { - char *p = s; - char *t; + unsigned char *p = (unsigned char*)s; + unsigned char *t; int res = 0; -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR p while(!res) @@ -107,7 +109,7 @@ int scan(char *s) INT { res = push_num(t, p, 10); continue; } "+" { res = stack_add(); continue; } "-" { res = stack_sub(); continue; } - "\000" { res = depth == 1 ? 0 : 2; continue; } + "\000" { res = depth == 1 ? 0 : 2; break; } [^] { res = 1; continue; } */ } @@ -123,14 +125,15 @@ int main(int argc, char **argv) while(!res && ++argp < argc) { - inp = argv[argp]; + inp = strdup(argv[argp]); len = strlen(inp); if (inp[0] == '\"' && inp[len-1] == '\"') { + inp[len - 1] = '\0'; ++inp; - len -=2; } res = scan(inp); + free(inp); } switch(res) { diff --git a/re2c/lessons/001_upn_calculator/calc_007.b.c b/re2c/lessons/001_upn_calculator/calc_007.b.c index b2b269a7..f7bccc0c 100755 --- a/re2c/lessons/001_upn_calculator/calc_007.b.c +++ b/re2c/lessons/001_upn_calculator/calc_007.b.c @@ -1,7 +1,7 @@ /* Generated by re2c */ #line 1 "calc_007.b.re" /* re2c lesson 001_upn_calculator, calc_007, (c) M. Boerger 2006 */ -#line 8 "calc_007.b.re" +#line 9 "calc_007.b.re" #include #include @@ -12,7 +12,7 @@ int stack[4]; int depth = 0; -int push_num(const char *t, const char *l, int radix) +int push_num(const unsigned char *t, const unsigned char *l, int radix) { int num = 0; @@ -24,7 +24,7 @@ int push_num(const char *t, const char *l, int radix) --t; while(++t < l) { - num = num * radix + (*t - '0'); + num = num * radix + (*t - (unsigned char)'0'); } DEBUG(printf("Num: %d\n", num)); @@ -54,11 +54,11 @@ int stack_sub() int scan(char *s) { - char *p = s; - char *t; + unsigned char *p = (unsigned char*)s; + unsigned char *t; int res = 0; -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR p while(!res) @@ -128,7 +128,7 @@ int scan(char *s) yych = *YYCURSOR; goto yy21; yy3: -#line 79 "calc_007.b.re" +#line 80 "calc_007.b.re" { continue; } #line 134 "" yy4: @@ -136,7 +136,7 @@ yy4: if((yych = *YYCURSOR) <= '/') goto yy5; if(yych <= '9') goto yy17; yy5: -#line 81 "calc_007.b.re" +#line 82 "calc_007.b.re" { res = push_num(t, p, 10); continue; } #line 142 "" yy6: @@ -144,22 +144,22 @@ yy6: goto yy16; yy7: ++YYCURSOR; -#line 82 "calc_007.b.re" +#line 83 "calc_007.b.re" { res = stack_add(); continue; } #line 150 "" yy9: ++YYCURSOR; -#line 83 "calc_007.b.re" +#line 84 "calc_007.b.re" { res = stack_sub(); continue; } #line 155 "" yy11: ++YYCURSOR; -#line 84 "calc_007.b.re" - { res = depth == 1 ? 0 : 2; continue; } +#line 85 "calc_007.b.re" + { res = depth == 1 ? 0 : 2; break; } #line 160 "" yy13: ++YYCURSOR; -#line 85 "calc_007.b.re" +#line 86 "calc_007.b.re" { res = 1; continue; } #line 165 "" yy15: @@ -176,7 +176,7 @@ yy17: if(yych <= '/') goto yy19; if(yych <= '9') goto yy17; yy19: -#line 80 "calc_007.b.re" +#line 81 "calc_007.b.re" { res = push_num(t, p, 8); continue; } #line 182 "" yy20: @@ -189,7 +189,7 @@ yy21: goto yy3; } } -#line 86 "calc_007.b.re" +#line 87 "calc_007.b.re" } return res; @@ -204,14 +204,15 @@ int main(int argc, char **argv) while(!res && ++argp < argc) { - inp = argv[argp]; + inp = strdup(argv[argp]); len = strlen(inp); if (inp[0] == '\"' && inp[len-1] == '\"') { + inp[len - 1] = '\0'; ++inp; - len -=2; } res = scan(inp); + free(inp); } switch(res) { diff --git a/re2c/lessons/001_upn_calculator/calc_007.b.re b/re2c/lessons/001_upn_calculator/calc_007.b.re index 3ebc9199..9d268fdf 100755 --- a/re2c/lessons/001_upn_calculator/calc_007.b.re +++ b/re2c/lessons/001_upn_calculator/calc_007.b.re @@ -3,7 +3,8 @@ - optimizing the generated code by using -b command line switch of re2c . This tells re2c to generate code that uses a decision table. The -b switch - also contains the -s behavior. + also contains the -s behavior. And -b also requires the input to be + unsigned chars. */ #include @@ -15,7 +16,7 @@ int stack[4]; int depth = 0; -int push_num(const char *t, const char *l, int radix) +int push_num(const unsigned char *t, const unsigned char *l, int radix) { int num = 0; @@ -27,7 +28,7 @@ int push_num(const char *t, const char *l, int radix) --t; while(++t < l) { - num = num * radix + (*t - '0'); + num = num * radix + (*t - (unsigned char)'0'); } DEBUG(printf("Num: %d\n", num)); @@ -57,11 +58,11 @@ int stack_sub() int scan(char *s) { - char *p = s; - char *t; + unsigned char *p = (unsigned char*)s; + unsigned char *t; int res = 0; -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR p while(!res) @@ -81,7 +82,7 @@ int scan(char *s) INT { res = push_num(t, p, 10); continue; } "+" { res = stack_add(); continue; } "-" { res = stack_sub(); continue; } - "\000" { res = depth == 1 ? 0 : 2; continue; } + "\000" { res = depth == 1 ? 0 : 2; break; } [^] { res = 1; continue; } */ } @@ -97,14 +98,15 @@ int main(int argc, char **argv) while(!res && ++argp < argc) { - inp = argv[argp]; + inp = strdup(argv[argp]); len = strlen(inp); if (inp[0] == '\"' && inp[len-1] == '\"') { + inp[len - 1] = '\0'; ++inp; - len -=2; } res = scan(inp); + free(inp); } switch(res) { diff --git a/re2c/lessons/001_upn_calculator/windows/main.b.c b/re2c/lessons/001_upn_calculator/windows/main.b.c index 24f3ec31..d544bee0 100755 --- a/re2c/lessons/001_upn_calculator/windows/main.b.c +++ b/re2c/lessons/001_upn_calculator/windows/main.b.c @@ -40,9 +40,9 @@ void InitHiResTimerAndVerifyWorking(void) */ int ScanFullSpeed(char *pzStrToScan, size_t lenStrToScan) { - char *pzCurScanPos = pzStrToScan; - char *pzBacktrackInfo = 0; -#define YYCTYPE char + unsigned char *pzCurScanPos = (unsigned char*)pzStrToScan; + unsigned char *pzBacktrackInfo = 0; +#define YYCTYPE unsigned char #define YYCURSOR pzCurScanPos #define YYLIMIT (pzStrToScan+lenStrToScan) #define YYMARKER pzBacktrackInfo @@ -169,9 +169,9 @@ yy17: */ int scan(char *pzStrToScan, size_t lenStrToScan) { - char *pzCurScanPos = pzStrToScan; - char *pzBacktrackInfo = 0; -#define YYCTYPE char + unsigned char *pzCurScanPos = (unsigned char*)pzStrToScan; + unsigned char *pzBacktrackInfo = 0; +#define YYCTYPE unsigned char #define YYCURSOR pzCurScanPos #define YYLIMIT (pzStrToScan+lenStrToScan) #define YYMARKER pzBacktrackInfo diff --git a/re2c/lessons/001_upn_calculator/windows/main.b.re b/re2c/lessons/001_upn_calculator/windows/main.b.re index 3e2abf80..1600b83d 100755 --- a/re2c/lessons/001_upn_calculator/windows/main.b.re +++ b/re2c/lessons/001_upn_calculator/windows/main.b.re @@ -78,9 +78,9 @@ void InitHiResTimerAndVerifyWorking(void) */ int ScanFullSpeed(char *pzStrToScan, size_t lenStrToScan) { - char *pzCurScanPos = pzStrToScan; - char *pzBacktrackInfo = 0; -#define YYCTYPE char + unsigned char *pzCurScanPos = (unsigned char*)pzStrToScan; + unsigned char *pzBacktrackInfo = 0; +#define YYCTYPE unsigned char #define YYCURSOR pzCurScanPos #define YYLIMIT (pzStrToScan+lenStrToScan) #define YYMARKER pzBacktrackInfo @@ -105,9 +105,9 @@ int ScanFullSpeed(char *pzStrToScan, size_t lenStrToScan) */ int scan(char *pzStrToScan, size_t lenStrToScan) { - char *pzCurScanPos = pzStrToScan; - char *pzBacktrackInfo = 0; -#define YYCTYPE char + unsigned char *pzCurScanPos = (unsigned char*)pzStrToScan; + unsigned char *pzBacktrackInfo = 0; +#define YYCTYPE unsigned char #define YYCURSOR pzCurScanPos #define YYLIMIT (pzStrToScan+lenStrToScan) #define YYMARKER pzBacktrackInfo diff --git a/re2c/lessons/002_strip_comments/strip_001.s.c b/re2c/lessons/002_strip_comments/strip_001.s.c index c4ff9274..540c792a 100755 --- a/re2c/lessons/002_strip_comments/strip_001.s.c +++ b/re2c/lessons/002_strip_comments/strip_001.s.c @@ -14,23 +14,23 @@ # error BSIZE must be greater YYMAXFILL #endif -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR s.cur #define YYLIMIT s.lim #define YYFILL(n) { if ((res = fill(&s, n)) >= 0) break; } typedef struct Scanner { - FILE *fp; - char *cur, *tok, *lim, *eof; - char buffer[BSIZE]; + FILE *fp; + unsigned char *cur, *tok, *lim, *eof; + unsigned char buffer[BSIZE]; } Scanner; int fill(Scanner *s, int len) { if (!len) { - s->tok = s->cur = buf = s->lim = s->buffer + s->cur = s->tok = s->lim = s->buffer; s->eof = 0; } if (!s->eof) diff --git a/re2c/lessons/002_strip_comments/strip_001.s.re b/re2c/lessons/002_strip_comments/strip_001.s.re index 5466fcea..05185be2 100755 --- a/re2c/lessons/002_strip_comments/strip_001.s.re +++ b/re2c/lessons/002_strip_comments/strip_001.s.re @@ -41,23 +41,23 @@ # error BSIZE must be greater YYMAXFILL #endif -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR s.cur #define YYLIMIT s.lim #define YYFILL(n) { if ((res = fill(&s, n)) >= 0) break; } typedef struct Scanner { - FILE *fp; - char *cur, *tok, *lim, *eof; - char buffer[BSIZE]; + FILE *fp; + unsigned char *cur, *tok, *lim, *eof; + unsigned char buffer[BSIZE]; } Scanner; int fill(Scanner *s, int len) { if (!len) { - s->tok = s->cur = buf = s->lim = s->buffer + s->cur = s->tok = s->lim = s->buffer; s->eof = 0; } if (!s->eof) diff --git a/re2c/lessons/002_strip_comments/strip_002.s.c b/re2c/lessons/002_strip_comments/strip_002.s.c index ad14ef04..0d764530 100755 --- a/re2c/lessons/002_strip_comments/strip_002.s.c +++ b/re2c/lessons/002_strip_comments/strip_002.s.c @@ -14,7 +14,7 @@ # error BSIZE must be greater YYMAXFILL #endif -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR s.cur #define YYLIMIT s.lim #define YYMARKER s.mrk @@ -22,16 +22,16 @@ typedef struct Scanner { - FILE *fp; - char *cur, *tok, *lim, *eof, *mrk; - char buffer[BSIZE]; + FILE *fp; + unsigned char *cur, *tok, *lim, *eof, *mrk; + unsigned char buffer[BSIZE]; } Scanner; int fill(Scanner *s, int len) { if (!len) { - s->tok = s->cur = s->lim = s->mrk = s->buffer; + s->cur = s->tok = s->lim = s->mrk = s->buffer; s->eof = 0; } if (!s->eof) diff --git a/re2c/lessons/002_strip_comments/strip_002.s.re b/re2c/lessons/002_strip_comments/strip_002.s.re index c18d3784..abf83af8 100755 --- a/re2c/lessons/002_strip_comments/strip_002.s.re +++ b/re2c/lessons/002_strip_comments/strip_002.s.re @@ -41,7 +41,7 @@ # error BSIZE must be greater YYMAXFILL #endif -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR s.cur #define YYLIMIT s.lim #define YYMARKER s.mrk @@ -49,16 +49,16 @@ typedef struct Scanner { - FILE *fp; - char *cur, *tok, *lim, *eof, *mrk; - char buffer[BSIZE]; + FILE *fp; + unsigned char *cur, *tok, *lim, *eof, *mrk; + unsigned char buffer[BSIZE]; } Scanner; int fill(Scanner *s, int len) { if (!len) { - s->tok = s->cur = s->lim = s->mrk = s->buffer; + s->cur = s->tok = s->lim = s->mrk = s->buffer; s->eof = 0; } if (!s->eof) diff --git a/re2c/lessons/002_strip_comments/strip_003.b.c b/re2c/lessons/002_strip_comments/strip_003.b.c index eb166021..af71c6e5 100755 --- a/re2c/lessons/002_strip_comments/strip_003.b.c +++ b/re2c/lessons/002_strip_comments/strip_003.b.c @@ -14,7 +14,7 @@ # error BSIZE must be greater YYMAXFILL #endif -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR s.cur #define YYLIMIT s.lim #define YYMARKER s.mrk @@ -23,16 +23,16 @@ typedef struct Scanner { - FILE *fp; - char *cur, *tok, *lim, *eof, *ctx, *mrk; - char buffer[BSIZE]; + FILE *fp; + unsigned char *cur, *tok, *lim, *eof, *ctx, *mrk; + unsigned char buffer[BSIZE]; } Scanner; int fill(Scanner *s, int len) { if (!len) { - s->tok = s->cur = s->lim = s->mrk = s->buffer; + s->cur = s->tok = s->lim = s->mrk = s->buffer; s->eof = 0; } if (!s->eof) diff --git a/re2c/lessons/002_strip_comments/strip_003.b.re b/re2c/lessons/002_strip_comments/strip_003.b.re index b53cee05..e150e34c 100755 --- a/re2c/lessons/002_strip_comments/strip_003.b.re +++ b/re2c/lessons/002_strip_comments/strip_003.b.re @@ -46,7 +46,7 @@ # error BSIZE must be greater YYMAXFILL #endif -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR s.cur #define YYLIMIT s.lim #define YYMARKER s.mrk @@ -55,16 +55,16 @@ typedef struct Scanner { - FILE *fp; - char *cur, *tok, *lim, *eof, *ctx, *mrk; - char buffer[BSIZE]; + FILE *fp; + unsigned char *cur, *tok, *lim, *eof, *ctx, *mrk; + unsigned char buffer[BSIZE]; } Scanner; int fill(Scanner *s, int len) { if (!len) { - s->tok = s->cur = s->lim = s->mrk = s->buffer; + s->cur = s->tok = s->lim = s->mrk = s->buffer; s->eof = 0; } if (!s->eof)