]> granicus.if.org Git - re2c/commitdiff
Modified to use a hex code for any non-printable character.
authornuffer <nuffer@642ea486-5414-0410-9d7f-a0204ed87703>
Tue, 27 Jul 2004 05:17:45 +0000 (05:17 +0000)
committernuffer <nuffer@642ea486-5414-0410-9d7f-a0204ed87703>
Tue, 27 Jul 2004 05:17:45 +0000 (05:17 +0000)
bootstrap/scanner.cc
code.cc
dfa.cc
dfa.h

index b197c0593dc0471bd6c2ea85419e1011c1e7d6fd..61dc3ff6d5707208fc048014eb2653509b4de133 100644 (file)
@@ -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 <stdlib.h>
@@ -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 92b02e50dd23f81db591017b1a524f10f05509bc..73972e8f0835e58dcf128989d04e0542a674b440 100644 (file)
--- 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 b3e1e618ab724be0f2d41cb1ba195267be429b21..8bc74707071a44e003dce2b8fc87b3907745aa64 100644 (file)
--- 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 c7ddfabfb41d967ff0537af5d5e355108c5cda55..37f4cc3b56988a0fb5968e8bd12acf83af64a7c2 100644 (file)
--- 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;