From: nuffer Date: Tue, 27 Jul 2004 05:17:45 +0000 (+0000) Subject: Modified to use a hex code for any non-printable character. X-Git-Tag: 0.13.6~691 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d5d8b28755ce8b510edb23b6b3311b7aaa978553;p=re2c Modified to use a hex code for any non-printable character. --- diff --git a/bootstrap/scanner.cc b/bootstrap/scanner.cc index b197c059..61dc3ff6 100644 --- a/bootstrap/scanner.cc +++ b/bootstrap/scanner.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 0.9.2 on Wed May 12 21:46:34 2004 */ +/* Generated by re2c 0.9.4 on Mon Jul 26 23:14:20 2004 */ #line 1 "scanner.re" /* $Id$ */ #include @@ -84,7 +84,7 @@ yy1: ++YYCURSOR; yy0: if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); yych = *YYCURSOR; - if(yych == '\n') goto yy4; + if(yych == 0x0A) goto yy4; if(yych != '/') goto yy6; goto yy2; yy2: yyaccept = 0; @@ -159,9 +159,9 @@ yy15: yych = *YYCURSOR; if(yych <= '/'){ if(yych <= '"'){ - if(yych <= '\n'){ - if(yych <= '\b') goto yy37; - if(yych <= '\t') goto yy33; + if(yych <= 0x0A){ + if(yych <= 0x08) goto yy37; + if(yych <= 0x09) goto yy33; goto yy35; } else { if(yych == ' ') goto yy33; @@ -232,7 +232,7 @@ yy22: #line 149 "scanner.cc" yy23: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if(yych != '\n') goto yy55; + if(yych != 0x0A) goto yy55; goto yy24; yy24: #line 122 "scanner.re" @@ -240,7 +240,7 @@ yy24: #line 157 "scanner.cc" yy25: yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); - if(yych != '\n') goto yy50; + if(yych != 0x0A) goto yy50; goto yy26; yy26: #line 123 "scanner.re" @@ -248,7 +248,7 @@ yy26: #line 165 "scanner.cc" yy27: yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); - if(yych != '\n') goto yy44; + if(yych != 0x0A) goto yy44; goto yy28; yy28: #line 129 "scanner.re" @@ -295,7 +295,7 @@ yy39: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; goto yy40; -yy40: if(yych == '\t') goto yy39; +yy40: if(yych == 0x09) goto yy39; if(yych == ' ') goto yy39; goto yy34; yy41: ++YYCURSOR; @@ -317,7 +317,7 @@ yy43: ++YYCURSOR; yych = *YYCURSOR; goto yy44; yy44: if(yych <= '['){ - if(yych != '\n') goto yy43; + if(yych != 0x0A) goto yy43; goto yy45; } else { if(yych <= '\\') goto yy46; @@ -334,7 +334,7 @@ yy45: YYCURSOR = YYMARKER; yy46: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == '\n') goto yy45; + if(yych == 0x0A) goto yy45; goto yy43; yy47: ++YYCURSOR; goto yy48; @@ -349,7 +349,7 @@ yy49: ++YYCURSOR; yych = *YYCURSOR; goto yy50; yy50: if(yych <= '&'){ - if(yych == '\n') goto yy45; + if(yych == 0x0A) goto yy45; goto yy49; } else { if(yych <= '\'') goto yy52; @@ -359,7 +359,7 @@ yy50: if(yych <= '&'){ yy51: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == '\n') goto yy45; + if(yych == 0x0A) goto yy45; goto yy49; yy52: ++YYCURSOR; goto yy53; @@ -374,7 +374,7 @@ yy54: ++YYCURSOR; yych = *YYCURSOR; goto yy55; yy55: if(yych <= '!'){ - if(yych == '\n') goto yy45; + if(yych == 0x0A) goto yy45; goto yy54; } else { if(yych <= '"') goto yy57; @@ -384,7 +384,7 @@ yy55: if(yych <= '!'){ yy56: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == '\n') goto yy45; + if(yych == 0x0A) goto yy45; goto yy54; yy57: ++YYCURSOR; goto yy58; @@ -471,8 +471,8 @@ yy74: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= '&'){ - if(yych <= '\n'){ - if(yych <= '\t') goto yy82; + if(yych <= 0x0A){ + if(yych <= 0x09) goto yy82; goto yy80; } else { if(yych == '"') goto yy84; @@ -523,18 +523,18 @@ yy83: #line 445 "scanner.cc" yy84: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == '\n') goto yy83; + if(yych == 0x0A) goto yy83; goto yy91; yy85: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == '\n') goto yy83; + if(yych == 0x0A) goto yy83; goto yy87; yy86: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; goto yy87; yy87: if(yych <= '&'){ - if(yych != '\n') goto yy86; + if(yych != 0x0A) goto yy86; goto yy88; } else { if(yych <= '\'') goto yy82; @@ -548,14 +548,14 @@ yy88: YYCURSOR = YYMARKER; yy89: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == '\n') goto yy88; + if(yych == 0x0A) goto yy88; goto yy86; yy90: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; goto yy91; yy91: if(yych <= '!'){ - if(yych == '\n') goto yy88; + if(yych == 0x0A) goto yy88; goto yy90; } else { if(yych <= '"') goto yy82; @@ -565,7 +565,7 @@ yy91: if(yych <= '!'){ yy92: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == '\n') goto yy88; + if(yych == 0x0A) goto yy88; goto yy90; } #line 179 "scanner.re" @@ -583,7 +583,7 @@ yy93: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= ')'){ - if(yych == '\n') goto yy98; + if(yych == 0x0A) goto yy98; goto yy100; } else { if(yych <= '*') goto yy95; diff --git a/code.cc b/code.cc index 92b02e50..73972e8f 100644 --- a/code.cc +++ b/code.cc @@ -230,9 +230,9 @@ void genIf(std::ostream &o, char *cmp, uint v, bool &readCh) { o << "\tif(yych "; } - o << cmp << " '"; - prtCh(o, v); - o << "')"; + o << cmp << " "; + prtChOrHex(o, v); + o << ")"; } void indent(std::ostream &o, uint i) @@ -426,7 +426,7 @@ void genCases(std::ostream &o, uint lb, Span *s) { for(;;) { - o << "\tcase '"; prtCh(o, lb); o << "':"; + o << "\tcase "; prtChOrHex(o, lb); o << ":"; if(++lb == s->ub) { break; diff --git a/dfa.cc b/dfa.cc index b3e1e618..8bc74707 100644 --- a/dfa.cc +++ b/dfa.cc @@ -9,6 +9,31 @@ inline char octCh(uint c){ return '0' + c%8; } +inline char hexCh(uint c){ + if (c < 10) + { + return '0' + c%16; + } + else + { + return 'A' + c%16 - 10; + } +} + +void prtChOrHex(std::ostream& o, uchar c){ + uchar oc = talx[c]; + if (isprint(oc)) + { + o << '\''; + prtCh(o, c); + o << '\''; + } + else + { + o << "0x" << hexCh(c>>4) << hexCh(c); + } +} + void prtCh(std::ostream &o, uchar c){ uchar oc = talx[c]; switch(oc){ diff --git a/dfa.h b/dfa.h index c7ddfabf..37f4cc3b 100644 --- a/dfa.h +++ b/dfa.h @@ -6,6 +6,7 @@ #include "re.h" extern void prtCh(std::ostream&, uchar); +extern void prtChOrHex(std::ostream&, uchar); extern void printSpan(std::ostream&, uint, uint); class DFA;