From 29a6d01984f158f50406fa8246a24ee1a7246efe Mon Sep 17 00:00:00 2001 From: Ulya Trofimovich Date: Fri, 24 May 2019 13:15:07 +0100 Subject: [PATCH] Added option --input-encoding that allows to use UTF-8 literals in regular expressions. --- Makefile.am | 2 +- bootstrap/src/options/parse_opts.cc | 1797 +++++++++-------- bootstrap/src/parse/lex.cc | 1480 +++++++++++--- bootstrap/src/parse/lex.h | 2 +- src/encoding/utf8/utf8.cc | 27 + src/encoding/utf8/utf8.h | 4 + src/msg/warn.cc | 4 +- src/msg/warn.h | 2 +- src/options/opt.h | 2 + src/options/parse_opts.re | 8 + src/parse/lex.re | 81 +- src/parse/scanner.h | 9 + .../utf8_literals.i8--input-encoding(utf8).c | 292 +++ .../utf8_literals.i8--input-encoding(utf8).re | 32 + 14 files changed, 2560 insertions(+), 1182 deletions(-) create mode 100644 test/encodings/utf8_literals.i8--input-encoding(utf8).c create mode 100644 test/encodings/utf8_literals.i8--input-encoding(utf8).re diff --git a/Makefile.am b/Makefile.am index e4049e46..0214c186 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,7 +4,7 @@ AM_CXXFLAGS = $(CXXFLAGSDEFAULT) if DEBUG AM_CXXFLAGS += -DRE2C_DEBUG endif -RE2CFLAGS = -b -W +RE2CFLAGS = -br -W # binary bin_PROGRAMS = re2c diff --git a/bootstrap/src/options/parse_opts.cc b/bootstrap/src/options/parse_opts.cc index 081e68a8..77971543 100644 --- a/bootstrap/src/options/parse_opts.cc +++ b/bootstrap/src/options/parse_opts.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 1.1.1 on Wed Feb 13 15:25:28 2019 */ +/* Generated by re2c 1.1.1 on Fri May 24 12:13:11 2019 */ #line 1 "../src/options/parse_opts.re" #include "src/codegen/input_api.h" #include "src/options/opt.h" @@ -1687,471 +1687,472 @@ yy393: yy395: yych = (YYCTYPE)*++YYCURSOR; if (yych <= 0x00) goto yy436; + if (yych == '-') goto yy438; goto yy284; yy396: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy438; + if (yych == 'i') goto yy439; goto yy284; yy397: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'd') goto yy439; + if (yych == 'd') goto yy440; goto yy284; yy398: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'b') goto yy440; + if (yych == 'b') goto yy441; goto yy284; yy399: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy441; + if (yych == 'n') goto yy442; goto yy284; yy400: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy442; + if (yych == 'o') goto yy443; goto yy284; yy401: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy443; + if (yych == 't') goto yy444; goto yy284; yy402: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy444; + if (yych == 'r') goto yy445; goto yy284; yy403: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy445; + if (yych == 't') goto yy446; goto yy284; yy404: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy446; + if (yych == '-') goto yy447; goto yy284; yy405: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'b') goto yy447; + if (yych == 'b') goto yy448; goto yy284; yy406: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy448; + if (yych == 'e') goto yy449; goto yy284; yy407: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy449; + if (yych == 't') goto yy450; goto yy284; yy408: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy450; + if (yych == '-') goto yy451; goto yy284; yy409: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'b') goto yy451; + if (yych == 'b') goto yy452; goto yy284; yy410: ++YYCURSOR; #line 159 "../src/options/parse_opts.re" { opts.set_tags (true); goto opt; } -#line 1752 "src/options/parse_opts.cc" +#line 1753 "src/options/parse_opts.cc" yy412: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'h') goto yy452; + if (yych == 'h') goto yy453; goto yy284; yy413: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'd') goto yy453; + if (yych == 'd') goto yy454; goto yy284; yy414: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '6') goto yy454; + if (yych == '6') goto yy455; goto yy284; yy415: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy455; + if (yych <= 0x00) goto yy456; goto yy284; yy416: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy457; + if (yych == 's') goto yy458; goto yy284; yy417: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'm') goto yy458; + if (yych == 'm') goto yy459; goto yy284; yy418: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy459; + if (yych == 'o') goto yy460; goto yy284; yy419: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy460; + if (yych == 'c') goto yy461; goto yy284; yy420: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy461; + if (yych == 'c') goto yy462; goto yy284; yy421: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy462; + if (yych == 'n') goto yy463; goto yy284; yy422: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy463; + if (yych == 'e') goto yy464; goto yy284; yy423: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy464; + if (yych == 'i') goto yy465; goto yy284; yy424: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy465; + if (yych == 'o') goto yy466; goto yy284; yy425: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy466; + if (yych == 'n') goto yy467; goto yy284; yy426: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'd') goto yy467; + if (yych == 'd') goto yy468; goto yy284; yy427: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'f') goto yy468; - if (yych == 'l') goto yy469; + if (yych == 'f') goto yy469; + if (yych == 'l') goto yy470; goto yy284; yy428: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'f') goto yy470; + if (yych == 'f') goto yy471; goto yy284; yy429: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy471; + if (yych == 'n') goto yy472; goto yy284; yy430: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'f') goto yy472; + if (yych == 'f') goto yy473; goto yy284; yy431: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy473; + if (yych == 's') goto yy474; goto yy284; yy432: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy474; + if (yych == 'o') goto yy475; goto yy284; yy433: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy475; + if (yych == 'c') goto yy476; goto yy284; yy434: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy476; + if (yych == 'n') goto yy477; goto yy284; yy435: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'y') goto yy477; + if (yych == 'y') goto yy478; goto yy284; yy436: ++YYCURSOR; #line 175 "../src/options/parse_opts.re" { NEXT_ARG("--input", opt_input); } -#line 1854 "src/options/parse_opts.cc" +#line 1855 "src/options/parse_opts.cc" yy438: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy478; + if (yych == 'e') goto yy479; goto yy284; yy439: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy479; + if (yych == 'o') goto yy480; goto yy284; yy440: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'u') goto yy480; + if (yych == '-') goto yy481; goto yy284; yy441: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy481; + if (yych == 'u') goto yy482; goto yy284; yy442: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'k') goto yy482; + if (yych == 'e') goto yy483; goto yy284; yy443: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy483; + if (yych == 'k') goto yy484; goto yy284; yy444: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy484; + if (yych == 'i') goto yy485; goto yy284; yy445: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy485; + if (yych == 's') goto yy486; goto yy284; yy446: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy487; + if (yych <= 0x00) goto yy487; goto yy284; yy447: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'l') goto yy488; + if (yych == 'c') goto yy489; goto yy284; yy448: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy489; + if (yych == 'l') goto yy490; goto yy284; yy449: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy490; + if (yych == '-') goto yy491; goto yy284; yy450: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy491; + if (yych == 'o') goto yy492; goto yy284; yy451: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'l') goto yy492; + if (yych == 'c') goto yy493; goto yy284; yy452: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy493; + if (yych == 'l') goto yy494; goto yy284; yy453: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy494; + if (yych == 'e') goto yy495; goto yy284; yy454: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy495; + if (yych == 'e') goto yy496; goto yy284; yy455: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x00) goto yy497; + goto yy284; +yy456: ++YYCURSOR; #line 164 "../src/options/parse_opts.re" { opts.set_encoding(Enc::UTF8); goto opt; } -#line 1927 "src/options/parse_opts.cc" -yy457: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy497; - goto yy284; +#line 1932 "src/options/parse_opts.cc" yy458: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy498; + if (yych == 'e') goto yy499; goto yy284; yy459: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy500; + if (yych <= 0x00) goto yy500; goto yy284; yy460: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'h') goto yy501; + if (yych == 'n') goto yy502; goto yy284; yy461: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy502; + if (yych == 'h') goto yy503; goto yy284; yy462: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy503; - if (yych == 'v') goto yy504; + if (yych == 't') goto yy504; goto yy284; yy463: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'd') goto yy505; + if (yych == 's') goto yy505; + if (yych == 'v') goto yy506; goto yy284; yy464: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy506; + if (yych == 'd') goto yy507; goto yy284; yy465: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'u') goto yy507; + if (yych == 'o') goto yy508; goto yy284; yy466: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy508; + if (yych == 'u') goto yy509; goto yy284; yy467: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'f') goto yy509; + if (yych == 'i') goto yy510; goto yy284; yy468: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'g') goto yy510; + if (yych == 'f') goto yy511; goto yy284; yy469: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy511; + if (yych == 'g') goto yy512; goto yy284; yy470: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy512; + if (yych == 'o') goto yy513; goto yy284; yy471: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy513; + if (yych == 'a') goto yy514; goto yy284; yy472: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy514; + if (yych == 't') goto yy515; goto yy284; yy473: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'k') goto yy515; + if (yych == 'a') goto yy516; goto yy284; yy474: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy516; + if (yych == 'k') goto yy517; goto yy284; yy475: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'l') goto yy517; + if (yych == 't') goto yy518; goto yy284; yy476: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'g') goto yy518; + if (yych == 'l') goto yy519; goto yy284; yy477: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy519; + if (yych == 'g') goto yy520; goto yy284; yy478: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy520; + if (yych == 'n') goto yy521; goto yy284; yy479: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy521; + if (yych == 'n') goto yy522; goto yy284; yy480: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'g') goto yy522; + if (yych == 'n') goto yy523; goto yy284; yy481: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy523; + if (yych == 'i') goto yy524; goto yy284; yy482: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy524; + if (yych == 'g') goto yy525; goto yy284; yy483: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'm') goto yy525; + if (yych == 'r') goto yy526; goto yy284; yy484: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy526; + if (yych == 'a') goto yy527; goto yy284; yy485: - ++YYCURSOR; -#line 172 "../src/options/parse_opts.re" - { NEXT_ARG("-o, --output", opt_output); } -#line 2045 "src/options/parse_opts.cc" -yy487: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy527; - if (yych == 'l') goto yy528; + if (yych == 'm') goto yy528; goto yy284; -yy488: +yy486: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy529; + if (yych == 'i') goto yy529; goto yy284; +yy487: + ++YYCURSOR; +#line 172 "../src/options/parse_opts.re" + { NEXT_ARG("-o, --output", opt_output); } +#line 2054 "src/options/parse_opts.cc" yy489: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'p') goto yy530; + if (yych == 'a') goto yy530; + if (yych == 'l') goto yy531; goto yy284; yy490: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy531; + if (yych == 'e') goto yy532; goto yy284; yy491: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy532; + if (yych == 'p') goto yy533; goto yy284; yy492: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy533; + if (yych == 'n') goto yy534; goto yy284; yy493: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy534; + if (yych == 'o') goto yy535; goto yy284; yy494: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy535; + if (yych == 'e') goto yy536; goto yy284; yy495: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'a') goto yy537; + goto yy284; +yy496: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x00) goto yy538; + goto yy284; +yy497: ++YYCURSOR; #line 163 "../src/options/parse_opts.re" { opts.set_encoding(Enc::UTF16); goto opt; } -#line 2083 "src/options/parse_opts.cc" -yy497: +#line 2092 "src/options/parse_opts.cc" +yy499: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy537; + if (yych <= 0x00) goto yy540; goto yy284; -yy498: +yy500: ++YYCURSOR; #line 140 "../src/options/parse_opts.re" { vernum (); return EXIT_OK; } -#line 2092 "src/options/parse_opts.cc" -yy500: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy539; - goto yy284; -yy501: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy541; - goto yy284; +#line 2101 "src/options/parse_opts.cc" yy502: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy542; + if (yych <= 0x00) goto yy542; goto yy284; yy503: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy543; + if (yych == 'a') goto yy544; goto yy284; yy504: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy544; + if (yych == 'o') goto yy545; goto yy284; yy505: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy545; + if (yych == 'e') goto yy546; goto yy284; yy506: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy546; + if (yych == 'e') goto yy547; goto yy284; yy507: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy547; + if (yych == '-') goto yy548; goto yy284; yy508: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'm') goto yy548; + if (yych == 'n') goto yy549; goto yy284; yy509: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy549; + if (yych == 't') goto yy550; goto yy284; yy510: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy550; + if (yych == 'm') goto yy551; goto yy284; yy511: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy552; + if (yych == 'a') goto yy552; goto yy284; yy512: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy553; + if (yych <= 0x00) goto yy553; goto yy284; yy513: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy554; + if (yych == 's') goto yy555; goto yy284; yy514: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy555; + if (yych == '-') goto yy556; goto yy284; yy515: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy557; + if (yych == 'e') goto yy557; goto yy284; yy516: yych = (YYCTYPE)*++YYCURSOR; @@ -2159,333 +2160,333 @@ yy516: goto yy284; yy517: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy560; + if (yych == 'i') goto yy560; goto yy284; yy518: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy561; + if (yych <= 0x00) goto yy561; goto yy284; yy519: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy562; + if (yych == 'a') goto yy563; goto yy284; yy520: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy563; + if (yych == '-') goto yy564; goto yy284; yy521: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'f') goto yy564; + if (yych == 't') goto yy565; goto yy284; yy522: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy565; + if (yych == 'c') goto yy566; goto yy284; yy523: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy566; + if (yych == '-') goto yy567; goto yy284; yy524: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'h') goto yy567; + if (yych == 'f') goto yy568; goto yy284; yy525: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy568; + if (yych == '-') goto yy569; goto yy284; yy526: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy569; + if (yych == 'a') goto yy570; goto yy284; yy527: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'p') goto yy570; + if (yych == 'h') goto yy571; goto yy284; yy528: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy571; + if (yych == 'i') goto yy572; goto yy284; yy529: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy572; + if (yych == 'o') goto yy573; goto yy284; yy530: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy574; + if (yych == 'p') goto yy574; goto yy284; yy531: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy575; + if (yych == 'o') goto yy575; goto yy284; yy532: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy315; + if (yych <= 0x00) goto yy576; goto yy284; yy533: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy577; + if (yych == 'a') goto yy578; goto yy284; yy534: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'd') goto yy578; + if (yych <= 0x00) goto yy579; goto yy284; yy535: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'n') goto yy315; + goto yy284; +yy536: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == '-') goto yy581; + goto yy284; +yy537: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'd') goto yy582; + goto yy284; +yy538: ++YYCURSOR; #line 161 "../src/options/parse_opts.re" { opts.set_encoding(Enc::UTF32); goto opt; } -#line 2237 "src/options/parse_opts.cc" -yy537: +#line 2250 "src/options/parse_opts.cc" +yy540: ++YYCURSOR; #line 147 "../src/options/parse_opts.re" { globopts.verbose = true; goto opt; } -#line 2242 "src/options/parse_opts.cc" -yy539: +#line 2255 "src/options/parse_opts.cc" +yy542: ++YYCURSOR; #line 139 "../src/options/parse_opts.re" { version (); return EXIT_OK; } -#line 2247 "src/options/parse_opts.cc" -yy541: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy579; - goto yy284; -yy542: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy580; - goto yy284; -yy543: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy581; - goto yy284; +#line 2260 "src/options/parse_opts.cc" yy544: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy582; + if (yych == 'r') goto yy583; goto yy284; yy545: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'g') goto yy583; + if (yych == 'r') goto yy584; goto yy284; yy546: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy584; + if (yych == 'n') goto yy585; goto yy284; yy547: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'p') goto yy585; + if (yych == 'r') goto yy586; goto yy284; yy548: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy586; + if (yych == 'g') goto yy587; goto yy284; yy549: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy587; + if (yych == 's') goto yy588; goto yy284; yy550: - ++YYCURSOR; -#line 195 "../src/options/parse_opts.re" - { globopts.dump_cfg = true; goto opt; } -#line 2288 "src/options/parse_opts.cc" + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'p') goto yy589; + goto yy284; +yy551: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'i') goto yy590; + goto yy284; yy552: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'u') goto yy589; + if (yych <= 0x00) goto yy591; goto yy284; yy553: + ++YYCURSOR; +#line 196 "../src/options/parse_opts.re" + { globopts.dump_cfg = true; goto opt; } +#line 2301 "src/options/parse_opts.cc" +yy555: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'u') goto yy593; + goto yy284; +yy556: yych = (YYCTYPE)*++YYCURSOR; switch (yych) { - case 'd': goto yy590; - case 'm': goto yy591; - case 'r': goto yy592; - case 't': goto yy593; + case 'd': goto yy594; + case 'm': goto yy595; + case 'r': goto yy596; + case 't': goto yy597; default: goto yy284; } -yy554: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy594; - goto yy284; -yy555: - ++YYCURSOR; -#line 189 "../src/options/parse_opts.re" - { globopts.dump_nfa = true; goto opt; } -#line 2310 "src/options/parse_opts.cc" yy557: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'p') goto yy595; + if (yych == 'r') goto yy598; goto yy284; yy558: ++YYCURSOR; -#line 143 "../src/options/parse_opts.re" - { globopts.target = TARGET_DOT; goto opt; } -#line 2319 "src/options/parse_opts.cc" +#line 190 "../src/options/parse_opts.re" + { globopts.dump_nfa = true; goto opt; } +#line 2323 "src/options/parse_opts.cc" yy560: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy596; + if (yych == 'p') goto yy599; goto yy284; yy561: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'p') goto yy597; - goto yy284; -yy562: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy598; - goto yy284; + ++YYCURSOR; +#line 143 "../src/options/parse_opts.re" + { globopts.target = TARGET_DOT; goto opt; } +#line 2332 "src/options/parse_opts.cc" yy563: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'f') goto yy599; + if (yych == 's') goto yy600; goto yy284; yy564: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy600; + if (yych == 'p') goto yy601; goto yy284; yy565: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy601; + if (yych == 'a') goto yy602; goto yy284; yy566: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy602; + if (yych == 'o') goto yy603; goto yy284; yy567: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy603; + if (yych == 'f') goto yy604; goto yy284; yy568: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'z') goto yy604; + if (yych == 's') goto yy605; goto yy284; yy569: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy605; + if (yych == 'i') goto yy606; goto yy284; yy570: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy606; + if (yych == 't') goto yy607; goto yy284; yy571: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy607; + if (yych == 'e') goto yy608; goto yy284; yy572: - ++YYCURSOR; -#line 146 "../src/options/parse_opts.re" - { globopts.rFlag = true; goto opt; } -#line 2372 "src/options/parse_opts.cc" -yy574: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy608; + if (yych == 'z') goto yy609; goto yy284; -yy575: - ++YYCURSOR; -#line 150 "../src/options/parse_opts.re" - { globopts.target = TARGET_SKELETON; goto opt; } -#line 2381 "src/options/parse_opts.cc" -yy577: +yy573: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy609; + if (yych == 'n') goto yy610; goto yy284; -yy578: +yy574: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy610; + if (yych == 't') goto yy611; goto yy284; -yy579: +yy575: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy611; + if (yych == 's') goto yy612; goto yy284; -yy580: +yy576: + ++YYCURSOR; +#line 146 "../src/options/parse_opts.re" + { globopts.rFlag = true; goto opt; } +#line 2389 "src/options/parse_opts.cc" +yy578: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy612; + if (yych == 's') goto yy613; goto yy284; +yy579: + ++YYCURSOR; +#line 150 "../src/options/parse_opts.re" + { globopts.target = TARGET_SKELETON; goto opt; } +#line 2398 "src/options/parse_opts.cc" yy581: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy613; + if (yych == 's') goto yy614; goto yy284; yy582: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy614; + if (yych == 'e') goto yy615; goto yy284; yy583: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy615; + if (yych == 's') goto yy616; goto yy284; yy584: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy616; + if (yych == 's') goto yy617; goto yy284; yy585: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'u') goto yy618; + if (yych == 's') goto yy618; goto yy284; yy586: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'z') goto yy619; + if (yych == 't') goto yy619; goto yy284; yy587: - ++YYCURSOR; -#line 194 "../src/options/parse_opts.re" - { globopts.dump_adfa = true; goto opt; } -#line 2426 "src/options/parse_opts.cc" -yy589: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy620; + if (yych == 'o') goto yy620; goto yy284; -yy590: +yy588: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy621; + if (yych <= 0x00) goto yy621; goto yy284; -yy591: +yy589: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy622; + if (yych == 'u') goto yy623; goto yy284; -yy592: +yy590: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy623; + if (yych == 'z') goto yy624; goto yy284; +yy591: + ++YYCURSOR; +#line 195 "../src/options/parse_opts.re" + { globopts.dump_adfa = true; goto opt; } +#line 2443 "src/options/parse_opts.cc" yy593: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy624; + if (yych == 'r') goto yy625; goto yy284; yy594: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'f') goto yy625; + if (yych == 'e') goto yy626; goto yy284; yy595: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy626; + if (yych == 'i') goto yy627; goto yy284; yy596: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy628; + if (yych == 'a') goto yy628; goto yy284; yy597: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy629; + if (yych == 'a') goto yy629; goto yy284; yy598: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'x') goto yy630; + if (yych == 'f') goto yy630; goto yy284; yy599: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy631; + if (yych <= 0x00) goto yy631; goto yy284; yy600: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy632; + if (yych == 's') goto yy633; goto yy284; yy601: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy634; + if (yych == 'o') goto yy634; goto yy284; yy602: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy635; + if (yych == 'x') goto yy635; goto yy284; yy603: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy636; + if (yych == 'd') goto yy636; goto yy284; yy604: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy637; + if (yych == 'o') goto yy637; goto yy284; yy605: yych = (YYCTYPE)*++YYCURSOR; @@ -2493,437 +2494,478 @@ yy605: goto yy284; yy606: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'u') goto yy640; + if (yych == 'n') goto yy640; goto yy284; yy607: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'u') goto yy641; + if (yych == 'i') goto yy641; goto yy284; yy608: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy642; + if (yych == 'a') goto yy642; goto yy284; yy609: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy643; + if (yych == 'e') goto yy643; goto yy284; yy610: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy644; + if (yych <= 0x00) goto yy644; goto yy284; yy611: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy645; + if (yych == 'u') goto yy646; goto yy284; yy612: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy647; + if (yych == 'u') goto yy647; goto yy284; yy613: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy649; + if (yych == 's') goto yy648; goto yy284; yy614: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy650; + if (yych == 't') goto yy649; goto yy284; yy615: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy651; + if (yych == 'r') goto yy650; goto yy284; yy616: - ++YYCURSOR; -#line 142 "../src/options/parse_opts.re" - { globopts.cFlag = true; goto opt; } -#line 2539 "src/options/parse_opts.cc" -yy618: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy652; + if (yych <= 0x00) goto yy651; goto yy284; -yy619: +yy617: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy653; + if (yych <= 0x00) goto yy653; goto yy284; -yy620: +yy618: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy654; + if (yych == 'i') goto yy655; goto yy284; -yy621: +yy619: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy655; + if (yych == 'e') goto yy656; goto yy284; -yy622: +yy620: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy656; + if (yych == 't') goto yy657; goto yy284; +yy621: + ++YYCURSOR; +#line 142 "../src/options/parse_opts.re" + { globopts.cFlag = true; goto opt; } +#line 2560 "src/options/parse_opts.cc" yy623: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'w') goto yy657; + if (yych == 't') goto yy658; goto yy284; yy624: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'g') goto yy658; + if (yych == 'a') goto yy659; goto yy284; yy625: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy659; + if (yych == 'e') goto yy660; goto yy284; yy626: - ++YYCURSOR; -#line 186 "../src/options/parse_opts.re" - { globopts.eager_skip = true; goto opt; } -#line 2576 "src/options/parse_opts.cc" + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 't') goto yy661; + goto yy284; +yy627: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'n') goto yy662; + goto yy284; yy628: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy661; + if (yych == 'w') goto yy663; goto yy284; yy629: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'l') goto yy663; + if (yych == 'g') goto yy664; goto yy284; yy630: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy664; + if (yych <= 0x00) goto yy665; goto yy284; yy631: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy666; - goto yy284; -yy632: ++YYCURSOR; -#line 156 "../src/options/parse_opts.re" - { opts.set_sFlag (true); goto opt; } +#line 187 "../src/options/parse_opts.re" + { globopts.eager_skip = true; goto opt; } #line 2597 "src/options/parse_opts.cc" +yy633: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x00) goto yy667; + goto yy284; yy634: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'f') goto yy667; + if (yych == 'l') goto yy669; goto yy284; yy635: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy668; + if (yych <= 0x00) goto yy670; goto yy284; yy636: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'd') goto yy669; + if (yych == 'i') goto yy672; goto yy284; yy637: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy670; + if (yych == 'r') goto yy673; goto yy284; yy638: ++YYCURSOR; -#line 149 "../src/options/parse_opts.re" - { globopts.version = false; goto opt; } -#line 2618 "src/options/parse_opts.cc" +#line 156 "../src/options/parse_opts.re" + { opts.set_sFlag (true); goto opt; } +#line 2622 "src/options/parse_opts.cc" yy640: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy671; + if (yych == 'f') goto yy674; goto yy284; yy641: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy672; + if (yych == 'o') goto yy675; goto yy284; yy642: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy673; + if (yych == 'd') goto yy676; goto yy284; yy643: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy675; + if (yych == '-') goto yy677; goto yy284; yy644: + ++YYCURSOR; +#line 149 "../src/options/parse_opts.re" + { globopts.version = false; goto opt; } +#line 2643 "src/options/parse_opts.cc" +yy646: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'r') goto yy678; + goto yy284; +yy647: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'r') goto yy679; + goto yy284; +yy648: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x00) goto yy680; + goto yy284; +yy649: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'a') goto yy682; + goto yy284; +yy650: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy676; + if (yych <= 0x00) goto yy683; goto yy284; -yy645: +yy651: ++YYCURSOR; #line 162 "../src/options/parse_opts.re" { opts.set_encoding(Enc::UCS2); goto opt; } -#line 2643 "src/options/parse_opts.cc" -yy647: +#line 2668 "src/options/parse_opts.cc" +yy653: ++YYCURSOR; #line 152 "../src/options/parse_opts.re" { opts.set_bFlag (true); goto opt; } -#line 2648 "src/options/parse_opts.cc" -yy649: +#line 2673 "src/options/parse_opts.cc" +yy655: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy678; + if (yych == 't') goto yy685; goto yy284; -yy650: +yy656: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'd') goto yy679; + if (yych == 'd') goto yy686; goto yy284; -yy651: +yy657: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy680; + if (yych == 'o') goto yy687; goto yy284; -yy652: +yy658: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy681; + if (yych <= 0x00) goto yy688; goto yy284; -yy653: +yy659: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy683; + if (yych == 't') goto yy690; goto yy284; -yy654: +yy660: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy684; + if (yych == '-') goto yy691; goto yy284; -yy655: +yy661: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy685; + if (yych <= 0x00) goto yy692; goto yy284; -yy656: +yy662: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy687; + if (yych <= 0x00) goto yy694; goto yy284; -yy657: +yy663: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy689; + if (yych <= 0x00) goto yy696; goto yy284; -yy658: +yy664: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy691; + if (yych == 'o') goto yy698; goto yy284; -yy659: +yy665: ++YYCURSOR; -#line 196 "../src/options/parse_opts.re" +#line 197 "../src/options/parse_opts.re" { globopts.dump_interf = true; goto opt; } -#line 2693 "src/options/parse_opts.cc" -yy661: +#line 2718 "src/options/parse_opts.cc" +yy667: ++YYCURSOR; #line 176 "../src/options/parse_opts.re" { NEXT_ARG("--empty-class", opt_empty_class); } -#line 2698 "src/options/parse_opts.cc" -yy663: +#line 2723 "src/options/parse_opts.cc" +yy669: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy692; + if (yych == 'i') goto yy699; goto yy284; -yy664: +yy670: ++YYCURSOR; #line 145 "../src/options/parse_opts.re" { globopts.FFlag = true; goto opt; } -#line 2707 "src/options/parse_opts.cc" -yy666: +#line 2732 "src/options/parse_opts.cc" +yy672: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'm') goto yy693; + if (yych == 'n') goto yy700; goto yy284; -yy667: +yy673: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy694; + if (yych == 'm') goto yy701; goto yy284; -yy668: +yy674: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy695; + if (yych == 'o') goto yy702; goto yy284; -yy669: +yy675: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy696; + if (yych == 'n') goto yy703; goto yy284; -yy670: +yy676: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy698; + if (yych <= 0x00) goto yy704; goto yy284; -yy671: +yy677: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy699; + if (yych == 't') goto yy706; goto yy284; -yy672: +yy678: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy700; + if (yych == 'e') goto yy707; goto yy284; -yy673: +yy679: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'e') goto yy708; + goto yy284; +yy680: ++YYCURSOR; -#line 179 "../src/options/parse_opts.re" +#line 180 "../src/options/parse_opts.re" { goto opt; } -#line 2740 "src/options/parse_opts.cc" -yy675: +#line 2769 "src/options/parse_opts.cc" +yy682: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy701; + if (yych == 't') goto yy709; goto yy284; -yy676: +yy683: ++YYCURSOR; #line 173 "../src/options/parse_opts.re" { NEXT_ARG("-t, --type-header", opt_header); } -#line 2749 "src/options/parse_opts.cc" -yy678: +#line 2778 "src/options/parse_opts.cc" +yy685: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy702; + if (yych == 'i') goto yy710; goto yy284; -yy679: +yy686: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy703; + if (yych <= 0x00) goto yy711; goto yy284; -yy680: +yy687: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy705; + if (yych == 's') goto yy713; goto yy284; -yy681: +yy688: ++YYCURSOR; #line 153 "../src/options/parse_opts.re" { opts.set_dFlag (true); goto opt; } -#line 2766 "src/options/parse_opts.cc" -yy683: +#line 2795 "src/options/parse_opts.cc" +yy690: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy706; + if (yych == 'i') goto yy714; goto yy284; -yy684: +yy691: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy707; + if (yych == 's') goto yy715; goto yy284; -yy685: +yy692: ++YYCURSOR; -#line 191 "../src/options/parse_opts.re" +#line 192 "../src/options/parse_opts.re" { globopts.dump_dfa_det = true; goto opt; } -#line 2779 "src/options/parse_opts.cc" -yy687: +#line 2808 "src/options/parse_opts.cc" +yy694: ++YYCURSOR; -#line 193 "../src/options/parse_opts.re" +#line 194 "../src/options/parse_opts.re" { globopts.dump_dfa_min = true; goto opt; } -#line 2784 "src/options/parse_opts.cc" -yy689: - ++YYCURSOR; -#line 190 "../src/options/parse_opts.re" - { globopts.dump_dfa_raw = true; goto opt; } -#line 2789 "src/options/parse_opts.cc" -yy691: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'p') goto yy708; - goto yy284; -yy692: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy709; - goto yy284; -yy693: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy710; - goto yy284; -yy694: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy711; - goto yy284; -yy695: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy713; - goto yy284; +#line 2813 "src/options/parse_opts.cc" yy696: ++YYCURSOR; -#line 184 "../src/options/parse_opts.re" - { globopts.lookahead = false; goto opt; } -#line 2814 "src/options/parse_opts.cc" +#line 191 "../src/options/parse_opts.re" + { globopts.dump_dfa_raw = true; goto opt; } +#line 2818 "src/options/parse_opts.cc" yy698: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy714; + if (yych == 'p') goto yy716; goto yy284; yy699: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy715; + if (yych == 'c') goto yy717; goto yy284; yy700: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy716; + if (yych == 'g') goto yy718; goto yy284; yy701: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy718; + if (yych == 'a') goto yy719; goto yy284; yy702: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'v') goto yy719; + if (yych <= 0x00) goto yy720; goto yy284; yy703: - ++YYCURSOR; -#line 158 "../src/options/parse_opts.re" - { opts.set_bCaseInverted (true); goto opt; } -#line 2839 "src/options/parse_opts.cc" -yy705: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy720; + if (yych == '-') goto yy722; goto yy284; +yy704: + ++YYCURSOR; +#line 185 "../src/options/parse_opts.re" + { globopts.lookahead = false; goto opt; } +#line 2847 "src/options/parse_opts.cc" yy706: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy722; + if (yych == 'a') goto yy723; goto yy284; yy707: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy723; + if (yych == 's') goto yy724; goto yy284; yy708: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy724; + if (yych <= 0x00) goto yy725; goto yy284; yy709: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'y') goto yy725; + if (yych == 'e') goto yy727; goto yy284; yy710: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy726; + if (yych == 'v') goto yy728; goto yy284; yy711: ++YYCURSOR; -#line 155 "../src/options/parse_opts.re" - { opts.set_iFlag (true); goto opt; } -#line 2868 "src/options/parse_opts.cc" +#line 158 "../src/options/parse_opts.re" + { opts.set_bCaseInverted (true); goto opt; } +#line 2872 "src/options/parse_opts.cc" yy713: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'd') goto yy727; + if (yych <= 0x00) goto yy729; goto yy284; yy714: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'g') goto yy728; + if (yych == 'o') goto yy731; goto yy284; yy715: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy729; + if (yych == 't') goto yy732; goto yy284; yy716: - ++YYCURSOR; -#line 183 "../src/options/parse_opts.re" - { NEXT_ARG("--posix-closure", opt_posix_closure); } -#line 2885 "src/options/parse_opts.cc" + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 't') goto yy733; + goto yy284; +yy717: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'y') goto yy734; + goto yy284; yy718: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy731; + if (yych <= 0x00) goto yy735; goto yy284; yy719: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy733; + if (yych == 't') goto yy737; goto yy284; yy720: ++YYCURSOR; -#line 154 "../src/options/parse_opts.re" - { opts.set_gFlag (true); goto opt; } -#line 2898 "src/options/parse_opts.cc" +#line 155 "../src/options/parse_opts.re" + { opts.set_iFlag (true); goto opt; } +#line 2905 "src/options/parse_opts.cc" yy722: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy734; + if (yych == 'd') goto yy738; goto yy284; yy723: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy735; + if (yych == 'g') goto yy739; goto yy284; yy724: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy736; + if (yych <= 0x00) goto yy740; goto yy284; yy725: + ++YYCURSOR; +#line 184 "../src/options/parse_opts.re" + { NEXT_ARG("--posix-closure", opt_posix_closure); } +#line 2922 "src/options/parse_opts.cc" +yy727: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy738; + if (yych <= 0x00) goto yy742; goto yy284; -yy726: +yy728: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy740; + if (yych == 'e') goto yy744; goto yy284; -yy727: +yy729: + ++YYCURSOR; +#line 154 "../src/options/parse_opts.re" + { opts.set_gFlag (true); goto opt; } +#line 2935 "src/options/parse_opts.cc" +yy731: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy742; + if (yych == 'n') goto yy745; goto yy284; -yy728: +yy732: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy743; + if (yych == 'a') goto yy746; goto yy284; -yy729: +yy733: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x00) goto yy747; + goto yy284; +yy734: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x00) goto yy749; + goto yy284; +yy735: + ++YYCURSOR; +#line 178 "../src/options/parse_opts.re" + { NEXT_ARG("--input-encoding", opt_input_encoding); } +#line 2956 "src/options/parse_opts.cc" +yy737: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x00) goto yy751; + goto yy284; +yy738: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'a') goto yy753; + goto yy284; +yy739: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 's') goto yy754; + goto yy284; +yy740: ++YYCURSOR; #line 166 "../src/options/parse_opts.re" { @@ -2931,95 +2973,95 @@ yy729: opts.set_posix_semantics(true); goto opt; } -#line 2935 "src/options/parse_opts.cc" -yy731: +#line 2977 "src/options/parse_opts.cc" +yy742: ++YYCURSOR; #line 144 "../src/options/parse_opts.re" { globopts.fFlag = true; goto opt; } -#line 2940 "src/options/parse_opts.cc" -yy733: +#line 2982 "src/options/parse_opts.cc" +yy744: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy744; + if (yych <= 0x00) goto yy755; goto yy284; -yy734: +yy745: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy746; + if (yych <= 0x00) goto yy757; goto yy284; -yy735: +yy746: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy748; + if (yych == 't') goto yy759; goto yy284; -yy736: +yy747: ++YYCURSOR; -#line 192 "../src/options/parse_opts.re" +#line 193 "../src/options/parse_opts.re" { globopts.dump_dfa_tagopt = true; goto opt; } -#line 2957 "src/options/parse_opts.cc" -yy738: +#line 2999 "src/options/parse_opts.cc" +yy749: ++YYCURSOR; #line 174 "../src/options/parse_opts.re" { NEXT_ARG("--encoding-policy", opt_encoding_policy); } -#line 2962 "src/options/parse_opts.cc" -yy740: +#line 3004 "src/options/parse_opts.cc" +yy751: ++YYCURSOR; #line 177 "../src/options/parse_opts.re" { NEXT_ARG("--location-format", opt_location_format); } -#line 2967 "src/options/parse_opts.cc" -yy742: +#line 3009 "src/options/parse_opts.cc" +yy753: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy749; + if (yych == 't') goto yy760; goto yy284; -yy743: +yy754: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy750; + if (yych <= 0x00) goto yy761; goto yy284; -yy744: +yy755: ++YYCURSOR; #line 157 "../src/options/parse_opts.re" { opts.set_bCaseInsensitive (true); goto opt; } -#line 2980 "src/options/parse_opts.cc" -yy746: +#line 3022 "src/options/parse_opts.cc" +yy757: ++YYCURSOR; -#line 182 "../src/options/parse_opts.re" +#line 183 "../src/options/parse_opts.re" { NEXT_ARG("--dfa-minimization", opt_dfa_minimization); } -#line 2985 "src/options/parse_opts.cc" -yy748: +#line 3027 "src/options/parse_opts.cc" +yy759: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy752; + if (yych == 's') goto yy763; goto yy284; -yy749: +yy760: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy753; + if (yych == 'e') goto yy764; goto yy284; -yy750: +yy761: ++YYCURSOR; -#line 185 "../src/options/parse_opts.re" +#line 186 "../src/options/parse_opts.re" { globopts.optimize_tags = false; goto opt; } -#line 2998 "src/options/parse_opts.cc" -yy752: +#line 3040 "src/options/parse_opts.cc" +yy763: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy754; + if (yych <= 0x00) goto yy765; goto yy284; -yy753: +yy764: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy756; + if (yych <= 0x00) goto yy767; goto yy284; -yy754: +yy765: ++YYCURSOR; -#line 197 "../src/options/parse_opts.re" +#line 198 "../src/options/parse_opts.re" { globopts.dump_closure_stats = true; goto opt; } -#line 3011 "src/options/parse_opts.cc" -yy756: +#line 3053 "src/options/parse_opts.cc" +yy767: ++YYCURSOR; #line 148 "../src/options/parse_opts.re" { globopts.bNoGenerationDate = true; goto opt; } -#line 3016 "src/options/parse_opts.cc" +#line 3058 "src/options/parse_opts.cc" } -#line 198 "../src/options/parse_opts.re" +#line 199 "../src/options/parse_opts.re" opt_output: -#line 3023 "src/options/parse_opts.cc" +#line 3065 "src/options/parse_opts.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -3057,29 +3099,29 @@ opt_output: 128, 128, 128, 128, 128, 128, 128, 128, }; yych = (YYCTYPE)*YYCURSOR; - if (yych <= 0x00) goto yy760; - if (yych != '-') goto yy762; -yy760: + if (yych <= 0x00) goto yy771; + if (yych != '-') goto yy773; +yy771: ++YYCURSOR; -#line 202 "../src/options/parse_opts.re" +#line 203 "../src/options/parse_opts.re" { ERRARG("-o, --output", "filename", *argv); } -#line 3067 "src/options/parse_opts.cc" -yy762: +#line 3109 "src/options/parse_opts.cc" +yy773: yych = (YYCTYPE)*++YYCURSOR; if (yybm[0+yych] & 128) { - goto yy762; + goto yy773; } ++YYCURSOR; -#line 203 "../src/options/parse_opts.re" +#line 204 "../src/options/parse_opts.re" { opts.set_output_file (*argv); goto opt; } -#line 3076 "src/options/parse_opts.cc" +#line 3118 "src/options/parse_opts.cc" } -#line 204 "../src/options/parse_opts.re" +#line 205 "../src/options/parse_opts.re" opt_header: -#line 3083 "src/options/parse_opts.cc" +#line 3125 "src/options/parse_opts.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -3117,29 +3159,29 @@ opt_header: 128, 128, 128, 128, 128, 128, 128, 128, }; yych = (YYCTYPE)*YYCURSOR; - if (yych <= 0x00) goto yy768; - if (yych != '-') goto yy770; -yy768: + if (yych <= 0x00) goto yy779; + if (yych != '-') goto yy781; +yy779: ++YYCURSOR; -#line 208 "../src/options/parse_opts.re" +#line 209 "../src/options/parse_opts.re" { ERRARG("-t, --type-header", "filename", *argv); } -#line 3127 "src/options/parse_opts.cc" -yy770: +#line 3169 "src/options/parse_opts.cc" +yy781: yych = (YYCTYPE)*++YYCURSOR; if (yybm[0+yych] & 128) { - goto yy770; + goto yy781; } ++YYCURSOR; -#line 209 "../src/options/parse_opts.re" +#line 210 "../src/options/parse_opts.re" { opts.set_header_file (*argv); goto opt; } -#line 3136 "src/options/parse_opts.cc" +#line 3178 "src/options/parse_opts.cc" } -#line 210 "../src/options/parse_opts.re" +#line 211 "../src/options/parse_opts.re" opt_incpath: -#line 3143 "src/options/parse_opts.cc" +#line 3185 "src/options/parse_opts.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -3177,511 +3219,576 @@ opt_incpath: 128, 128, 128, 128, 128, 128, 128, 128, }; yych = (YYCTYPE)*YYCURSOR; - if (yych <= 0x00) goto yy776; - if (yych != '-') goto yy778; -yy776: + if (yych <= 0x00) goto yy787; + if (yych != '-') goto yy789; +yy787: ++YYCURSOR; -#line 214 "../src/options/parse_opts.re" +#line 215 "../src/options/parse_opts.re" { ERRARG("-I", "filename", *argv); } -#line 3187 "src/options/parse_opts.cc" -yy778: +#line 3229 "src/options/parse_opts.cc" +yy789: yych = (YYCTYPE)*++YYCURSOR; if (yybm[0+yych] & 128) { - goto yy778; + goto yy789; } ++YYCURSOR; -#line 215 "../src/options/parse_opts.re" +#line 216 "../src/options/parse_opts.re" { globopts.incpaths.push_back(*argv); goto opt; } -#line 3196 "src/options/parse_opts.cc" +#line 3238 "src/options/parse_opts.cc" } -#line 216 "../src/options/parse_opts.re" +#line 217 "../src/options/parse_opts.re" opt_encoding_policy: -#line 3203 "src/options/parse_opts.cc" +#line 3245 "src/options/parse_opts.cc" { YYCTYPE yych; yych = (YYCTYPE)*YYCURSOR; if (yych <= 'h') { - if (yych == 'f') goto yy786; + if (yych == 'f') goto yy797; } else { - if (yych <= 'i') goto yy787; - if (yych == 's') goto yy788; + if (yych <= 'i') goto yy798; + if (yych == 's') goto yy799; } ++YYCURSOR; -yy785: -#line 220 "../src/options/parse_opts.re" +yy796: +#line 221 "../src/options/parse_opts.re" { ERRARG("--encoding-policy", "ignore | substitute | fail", *argv); } -#line 3217 "src/options/parse_opts.cc" -yy786: +#line 3259 "src/options/parse_opts.cc" +yy797: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'a') goto yy789; - goto yy785; -yy787: + if (yych == 'a') goto yy800; + goto yy796; +yy798: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'g') goto yy791; - goto yy785; -yy788: + if (yych == 'g') goto yy802; + goto yy796; +yy799: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'u') goto yy792; - goto yy785; -yy789: + if (yych == 'u') goto yy803; + goto yy796; +yy800: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy793; -yy790: + if (yych == 'i') goto yy804; +yy801: YYCURSOR = YYMARKER; - goto yy785; -yy791: + goto yy796; +yy802: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy794; - goto yy790; -yy792: + if (yych == 'n') goto yy805; + goto yy801; +yy803: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'b') goto yy795; - goto yy790; -yy793: + if (yych == 'b') goto yy806; + goto yy801; +yy804: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'l') goto yy796; - goto yy790; -yy794: + if (yych == 'l') goto yy807; + goto yy801; +yy805: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy797; - goto yy790; -yy795: + if (yych == 'o') goto yy808; + goto yy801; +yy806: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy798; - goto yy790; -yy796: + if (yych == 's') goto yy809; + goto yy801; +yy807: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy799; - goto yy790; -yy797: + if (yych <= 0x00) goto yy810; + goto yy801; +yy808: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy801; - goto yy790; -yy798: + if (yych == 'r') goto yy812; + goto yy801; +yy809: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy802; - goto yy790; -yy799: + if (yych == 't') goto yy813; + goto yy801; +yy810: ++YYCURSOR; -#line 223 "../src/options/parse_opts.re" +#line 224 "../src/options/parse_opts.re" { opts.set_encoding_policy (Enc::POLICY_FAIL); goto opt; } -#line 3272 "src/options/parse_opts.cc" -yy801: +#line 3314 "src/options/parse_opts.cc" +yy812: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy803; - goto yy790; -yy802: + if (yych == 'e') goto yy814; + goto yy801; +yy813: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy804; - goto yy790; -yy803: + if (yych == 'i') goto yy815; + goto yy801; +yy814: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy805; - goto yy790; -yy804: + if (yych <= 0x00) goto yy816; + goto yy801; +yy815: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy807; - goto yy790; -yy805: + if (yych == 't') goto yy818; + goto yy801; +yy816: ++YYCURSOR; -#line 221 "../src/options/parse_opts.re" +#line 222 "../src/options/parse_opts.re" { opts.set_encoding_policy (Enc::POLICY_IGNORE); goto opt; } -#line 3293 "src/options/parse_opts.cc" -yy807: +#line 3335 "src/options/parse_opts.cc" +yy818: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'u') goto yy790; + if (yych != 'u') goto yy801; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy790; + if (yych != 't') goto yy801; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy790; + if (yych != 'e') goto yy801; yych = (YYCTYPE)*++YYCURSOR; - if (yych >= 0x01) goto yy790; + if (yych >= 0x01) goto yy801; ++YYCURSOR; -#line 222 "../src/options/parse_opts.re" +#line 223 "../src/options/parse_opts.re" { opts.set_encoding_policy (Enc::POLICY_SUBSTITUTE); goto opt; } -#line 3306 "src/options/parse_opts.cc" +#line 3348 "src/options/parse_opts.cc" } -#line 224 "../src/options/parse_opts.re" +#line 225 "../src/options/parse_opts.re" opt_input: -#line 3313 "src/options/parse_opts.cc" +#line 3355 "src/options/parse_opts.cc" { YYCTYPE yych; yych = (YYCTYPE)*YYCURSOR; - if (yych <= 'b') goto yy815; - if (yych <= 'c') goto yy817; - if (yych <= 'd') goto yy818; -yy815: + if (yych <= 'b') goto yy826; + if (yych <= 'c') goto yy828; + if (yych <= 'd') goto yy829; +yy826: ++YYCURSOR; -yy816: -#line 228 "../src/options/parse_opts.re" +yy827: +#line 229 "../src/options/parse_opts.re" { ERRARG("--input", "default | custom", *argv); } -#line 3325 "src/options/parse_opts.cc" -yy817: +#line 3367 "src/options/parse_opts.cc" +yy828: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'u') goto yy819; - goto yy816; -yy818: + if (yych == 'u') goto yy830; + goto yy827; +yy829: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'e') goto yy821; - goto yy816; -yy819: + if (yych == 'e') goto yy832; + goto yy827; +yy830: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy822; -yy820: + if (yych == 's') goto yy833; +yy831: YYCURSOR = YYMARKER; - goto yy816; -yy821: + goto yy827; +yy832: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'f') goto yy823; - goto yy820; -yy822: + if (yych == 'f') goto yy834; + goto yy831; +yy833: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy824; - goto yy820; -yy823: + if (yych == 't') goto yy835; + goto yy831; +yy834: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy825; - goto yy820; -yy824: + if (yych == 'a') goto yy836; + goto yy831; +yy835: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy826; - goto yy820; -yy825: + if (yych == 'o') goto yy837; + goto yy831; +yy836: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'u') goto yy827; - goto yy820; -yy826: + if (yych == 'u') goto yy838; + goto yy831; +yy837: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'm') goto yy828; - goto yy820; -yy827: + if (yych == 'm') goto yy839; + goto yy831; +yy838: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'l') goto yy829; - goto yy820; -yy828: + if (yych == 'l') goto yy840; + goto yy831; +yy839: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy830; - goto yy820; -yy829: + if (yych <= 0x00) goto yy841; + goto yy831; +yy840: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy832; - goto yy820; -yy830: + if (yych == 't') goto yy843; + goto yy831; +yy841: ++YYCURSOR; -#line 230 "../src/options/parse_opts.re" +#line 231 "../src/options/parse_opts.re" { opts.set_input_api(INPUT_CUSTOM); goto opt; } -#line 3380 "src/options/parse_opts.cc" -yy832: +#line 3422 "src/options/parse_opts.cc" +yy843: yych = (YYCTYPE)*++YYCURSOR; - if (yych >= 0x01) goto yy820; + if (yych >= 0x01) goto yy831; ++YYCURSOR; -#line 229 "../src/options/parse_opts.re" +#line 230 "../src/options/parse_opts.re" { opts.set_input_api(INPUT_DEFAULT); goto opt; } -#line 3387 "src/options/parse_opts.cc" +#line 3429 "src/options/parse_opts.cc" } -#line 231 "../src/options/parse_opts.re" +#line 232 "../src/options/parse_opts.re" opt_empty_class: -#line 3394 "src/options/parse_opts.cc" +#line 3436 "src/options/parse_opts.cc" { YYCTYPE yych; yych = (YYCTYPE)*YYCURSOR; - if (yych == 'e') goto yy839; - if (yych == 'm') goto yy840; + if (yych == 'e') goto yy850; + if (yych == 'm') goto yy851; ++YYCURSOR; -yy838: -#line 235 "../src/options/parse_opts.re" +yy849: +#line 236 "../src/options/parse_opts.re" { ERRARG("--empty-class", "match-empty | match-none | error", *argv); } -#line 3404 "src/options/parse_opts.cc" -yy839: +#line 3446 "src/options/parse_opts.cc" +yy850: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'r') goto yy841; - goto yy838; -yy840: + if (yych == 'r') goto yy852; + goto yy849; +yy851: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'a') goto yy843; - goto yy838; -yy841: + if (yych == 'a') goto yy854; + goto yy849; +yy852: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy844; -yy842: + if (yych == 'r') goto yy855; +yy853: YYCURSOR = YYMARKER; - goto yy838; -yy843: + goto yy849; +yy854: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy845; - goto yy842; -yy844: + if (yych == 't') goto yy856; + goto yy853; +yy855: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy846; - goto yy842; -yy845: + if (yych == 'o') goto yy857; + goto yy853; +yy856: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy847; - goto yy842; -yy846: + if (yych == 'c') goto yy858; + goto yy853; +yy857: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy848; - goto yy842; -yy847: + if (yych == 'r') goto yy859; + goto yy853; +yy858: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'h') goto yy849; - goto yy842; -yy848: + if (yych == 'h') goto yy860; + goto yy853; +yy859: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy850; - goto yy842; -yy849: + if (yych <= 0x00) goto yy861; + goto yy853; +yy860: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '-') goto yy852; - goto yy842; -yy850: + if (yych == '-') goto yy863; + goto yy853; +yy861: ++YYCURSOR; -#line 238 "../src/options/parse_opts.re" +#line 239 "../src/options/parse_opts.re" { opts.set_empty_class_policy (EMPTY_CLASS_ERROR); goto opt; } -#line 3451 "src/options/parse_opts.cc" -yy852: +#line 3493 "src/options/parse_opts.cc" +yy863: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy853; - if (yych == 'n') goto yy854; - goto yy842; -yy853: + if (yych == 'e') goto yy864; + if (yych == 'n') goto yy865; + goto yy853; +yy864: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'm') goto yy855; - goto yy842; -yy854: + if (yych == 'm') goto yy866; + goto yy853; +yy865: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy856; - goto yy842; -yy855: + if (yych == 'o') goto yy867; + goto yy853; +yy866: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'p') goto yy857; - goto yy842; -yy856: + if (yych == 'p') goto yy868; + goto yy853; +yy867: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy858; - goto yy842; -yy857: + if (yych == 'n') goto yy869; + goto yy853; +yy868: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy859; - goto yy842; -yy858: + if (yych == 't') goto yy870; + goto yy853; +yy869: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy860; - goto yy842; -yy859: + if (yych == 'e') goto yy871; + goto yy853; +yy870: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'y') goto yy861; - goto yy842; -yy860: + if (yych == 'y') goto yy872; + goto yy853; +yy871: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy862; - goto yy842; -yy861: + if (yych <= 0x00) goto yy873; + goto yy853; +yy872: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy864; - goto yy842; -yy862: + if (yych <= 0x00) goto yy875; + goto yy853; +yy873: ++YYCURSOR; -#line 237 "../src/options/parse_opts.re" +#line 238 "../src/options/parse_opts.re" { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_NONE); goto opt; } -#line 3497 "src/options/parse_opts.cc" -yy864: +#line 3539 "src/options/parse_opts.cc" +yy875: ++YYCURSOR; -#line 236 "../src/options/parse_opts.re" +#line 237 "../src/options/parse_opts.re" { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_EMPTY); goto opt; } -#line 3502 "src/options/parse_opts.cc" +#line 3544 "src/options/parse_opts.cc" } -#line 239 "../src/options/parse_opts.re" +#line 240 "../src/options/parse_opts.re" opt_location_format: -#line 3509 "src/options/parse_opts.cc" +#line 3551 "src/options/parse_opts.cc" { YYCTYPE yych; yych = (YYCTYPE)*YYCURSOR; - if (yych == 'g') goto yy870; - if (yych == 'm') goto yy871; + if (yych == 'g') goto yy881; + if (yych == 'm') goto yy882; ++YYCURSOR; -yy869: -#line 243 "../src/options/parse_opts.re" +yy880: +#line 244 "../src/options/parse_opts.re" { ERRARG("--location-format", "gnu | msvc", *argv); } -#line 3519 "src/options/parse_opts.cc" -yy870: +#line 3561 "src/options/parse_opts.cc" +yy881: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'n') goto yy872; - goto yy869; -yy871: + if (yych == 'n') goto yy883; + goto yy880; +yy882: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 's') goto yy874; - goto yy869; -yy872: + if (yych == 's') goto yy885; + goto yy880; +yy883: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'u') goto yy875; -yy873: + if (yych == 'u') goto yy886; +yy884: YYCURSOR = YYMARKER; - goto yy869; -yy874: + goto yy880; +yy885: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'v') goto yy876; - goto yy873; -yy875: + if (yych == 'v') goto yy887; + goto yy884; +yy886: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy877; - goto yy873; -yy876: + if (yych <= 0x00) goto yy888; + goto yy884; +yy887: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy879; - goto yy873; -yy877: + if (yych == 'c') goto yy890; + goto yy884; +yy888: ++YYCURSOR; -#line 244 "../src/options/parse_opts.re" +#line 245 "../src/options/parse_opts.re" { msg.locfmt = LOCFMT_GNU; goto opt; } -#line 3550 "src/options/parse_opts.cc" -yy879: +#line 3592 "src/options/parse_opts.cc" +yy890: yych = (YYCTYPE)*++YYCURSOR; - if (yych >= 0x01) goto yy873; + if (yych >= 0x01) goto yy884; ++YYCURSOR; -#line 245 "../src/options/parse_opts.re" +#line 246 "../src/options/parse_opts.re" { msg.locfmt = LOCFMT_MSVC; goto opt; } -#line 3557 "src/options/parse_opts.cc" +#line 3599 "src/options/parse_opts.cc" } -#line 246 "../src/options/parse_opts.re" +#line 247 "../src/options/parse_opts.re" + + +opt_input_encoding: + +#line 3606 "src/options/parse_opts.cc" +{ + YYCTYPE yych; + yych = (YYCTYPE)*YYCURSOR; + if (yych == 'a') goto yy897; + if (yych == 'u') goto yy898; + ++YYCURSOR; +yy896: +#line 251 "../src/options/parse_opts.re" + { ERRARG("--input-encoding", "ascii | utf8", *argv); } +#line 3616 "src/options/parse_opts.cc" +yy897: + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych == 's') goto yy899; + goto yy896; +yy898: + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych == 't') goto yy901; + goto yy896; +yy899: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'c') goto yy902; +yy900: + YYCURSOR = YYMARKER; + goto yy896; +yy901: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'f') goto yy903; + goto yy900; +yy902: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'i') goto yy904; + goto yy900; +yy903: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == '8') goto yy905; + goto yy900; +yy904: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'i') goto yy906; + goto yy900; +yy905: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x00) goto yy907; + goto yy900; +yy906: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x00) goto yy909; + goto yy900; +yy907: + ++YYCURSOR; +#line 253 "../src/options/parse_opts.re" + { globopts.input_encoding = Enc::UTF8; goto opt; } +#line 3659 "src/options/parse_opts.cc" +yy909: + ++YYCURSOR; +#line 252 "../src/options/parse_opts.re" + { globopts.input_encoding = Enc::ASCII; goto opt; } +#line 3664 "src/options/parse_opts.cc" +} +#line 254 "../src/options/parse_opts.re" opt_dfa_minimization: -#line 3564 "src/options/parse_opts.cc" +#line 3671 "src/options/parse_opts.cc" { YYCTYPE yych; yych = (YYCTYPE)*YYCURSOR; - if (yych == 'm') goto yy886; - if (yych == 't') goto yy887; + if (yych == 'm') goto yy915; + if (yych == 't') goto yy916; ++YYCURSOR; -yy885: -#line 250 "../src/options/parse_opts.re" +yy914: +#line 258 "../src/options/parse_opts.re" { ERRARG("--dfa-minimization", "table | moore", *argv); } -#line 3574 "src/options/parse_opts.cc" -yy886: +#line 3681 "src/options/parse_opts.cc" +yy915: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'o') goto yy888; - goto yy885; -yy887: + if (yych == 'o') goto yy917; + goto yy914; +yy916: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'a') goto yy890; - goto yy885; -yy888: + if (yych == 'a') goto yy919; + goto yy914; +yy917: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy891; -yy889: + if (yych == 'o') goto yy920; +yy918: YYCURSOR = YYMARKER; - goto yy885; -yy890: + goto yy914; +yy919: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'b') goto yy892; - goto yy889; -yy891: + if (yych == 'b') goto yy921; + goto yy918; +yy920: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy893; - goto yy889; -yy892: + if (yych == 'r') goto yy922; + goto yy918; +yy921: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'l') goto yy894; - goto yy889; -yy893: + if (yych == 'l') goto yy923; + goto yy918; +yy922: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy895; - goto yy889; -yy894: + if (yych == 'e') goto yy924; + goto yy918; +yy923: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy896; - goto yy889; -yy895: + if (yych == 'e') goto yy925; + goto yy918; +yy924: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy897; - goto yy889; -yy896: + if (yych <= 0x00) goto yy926; + goto yy918; +yy925: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy899; - goto yy889; -yy897: + if (yych <= 0x00) goto yy928; + goto yy918; +yy926: ++YYCURSOR; -#line 252 "../src/options/parse_opts.re" +#line 260 "../src/options/parse_opts.re" { globopts.dfa_minimization = DFA_MINIMIZATION_MOORE; goto opt; } -#line 3621 "src/options/parse_opts.cc" -yy899: +#line 3728 "src/options/parse_opts.cc" +yy928: ++YYCURSOR; -#line 251 "../src/options/parse_opts.re" +#line 259 "../src/options/parse_opts.re" { globopts.dfa_minimization = DFA_MINIMIZATION_TABLE; goto opt; } -#line 3626 "src/options/parse_opts.cc" +#line 3733 "src/options/parse_opts.cc" } -#line 253 "../src/options/parse_opts.re" +#line 261 "../src/options/parse_opts.re" opt_posix_closure: -#line 3633 "src/options/parse_opts.cc" +#line 3740 "src/options/parse_opts.cc" { YYCTYPE yych; yych = (YYCTYPE)*YYCURSOR; - if (yych == 'g') goto yy905; + if (yych == 'g') goto yy934; ++YYCURSOR; -yy904: -#line 257 "../src/options/parse_opts.re" +yy933: +#line 265 "../src/options/parse_opts.re" { ERRARG("--posix-closure", "gor1 | gtop", *argv); } -#line 3642 "src/options/parse_opts.cc" -yy905: +#line 3749 "src/options/parse_opts.cc" +yy934: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'o') goto yy906; - if (yych == 't') goto yy908; - goto yy904; -yy906: + if (yych == 'o') goto yy935; + if (yych == 't') goto yy937; + goto yy933; +yy935: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy909; -yy907: + if (yych == 'r') goto yy938; +yy936: YYCURSOR = YYMARKER; - goto yy904; -yy908: + goto yy933; +yy937: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy910; - goto yy907; -yy909: + if (yych == 'o') goto yy939; + goto yy936; +yy938: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '1') goto yy911; - goto yy907; -yy910: + if (yych == '1') goto yy940; + goto yy936; +yy939: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'p') goto yy912; - goto yy907; -yy911: + if (yych == 'p') goto yy941; + goto yy936; +yy940: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy913; - goto yy907; -yy912: + if (yych <= 0x00) goto yy942; + goto yy936; +yy941: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 0x00) goto yy915; - goto yy907; -yy913: + if (yych <= 0x00) goto yy944; + goto yy936; +yy942: ++YYCURSOR; -#line 258 "../src/options/parse_opts.re" +#line 266 "../src/options/parse_opts.re" { globopts.posix_closure = POSIX_CLOSURE_GOR1; goto opt; } -#line 3678 "src/options/parse_opts.cc" -yy915: +#line 3785 "src/options/parse_opts.cc" +yy944: ++YYCURSOR; -#line 259 "../src/options/parse_opts.re" +#line 267 "../src/options/parse_opts.re" { globopts.posix_closure = POSIX_CLOSURE_GTOP; goto opt; } -#line 3683 "src/options/parse_opts.cc" +#line 3790 "src/options/parse_opts.cc" } -#line 260 "../src/options/parse_opts.re" +#line 268 "../src/options/parse_opts.re" end: diff --git a/bootstrap/src/parse/lex.cc b/bootstrap/src/parse/lex.cc index 309871d0..f36829dc 100644 --- a/bootstrap/src/parse/lex.cc +++ b/bootstrap/src/parse/lex.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 1.1.1 on Tue Feb 19 16:29:01 2019 */ +/* Generated by re2c 1.1.1 on Fri May 24 12:40:10 2019 */ #line 1 "../src/parse/lex.re" #include "src/util/c99_stdint.h" #include @@ -2817,8 +2817,11 @@ uint32_t Scanner::lex_cls_chr() { tok = cur; const loc_t &loc = cur_loc(); + #line 599 "../src/parse/lex.re" -#line 2822 "src/parse/lex.cc" + if (globopts->input_encoding == Enc::ASCII) { + +#line 2825 "src/parse/lex.cc" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -2835,20 +2838,20 @@ uint32_t Scanner::lex_cls_chr() } yy476: ++YYCURSOR; -#line 575 "../src/parse/lex.re" +#line 580 "../src/parse/lex.re" { fail_if_eof(); return 0; } -#line 2841 "src/parse/lex.cc" +#line 2844 "src/parse/lex.cc" yy478: ++YYCURSOR; yy479: -#line 581 "../src/parse/lex.re" - { return static_cast(tok[0]); } -#line 2847 "src/parse/lex.cc" +#line 582 "../src/parse/lex.re" + { return decode(tok); } +#line 2850 "src/parse/lex.cc" yy480: ++YYCURSOR; -#line 576 "../src/parse/lex.re" +#line 574 "../src/parse/lex.re" { msg.fatal(loc, "newline in character class"); } -#line 2852 "src/parse/lex.cc" +#line 2855 "src/parse/lex.cc" yy482: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy480; @@ -2907,36 +2910,36 @@ yy483: } } yy484: -#line 579 "../src/parse/lex.re" +#line 577 "../src/parse/lex.re" { msg.fatal(loc, "syntax error in escape sequence"); } -#line 2913 "src/parse/lex.cc" +#line 2916 "src/parse/lex.cc" yy485: ++YYCURSOR; yy486: -#line 594 "../src/parse/lex.re" +#line 595 "../src/parse/lex.re" { - msg.warn.useless_escape(loc, tok[1]); - return static_cast(tok[1]); + msg.warn.useless_escape(loc, tok, cur); + return decode(tok + 1); } -#line 2922 "src/parse/lex.cc" +#line 2925 "src/parse/lex.cc" yy487: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy480; goto yy486; yy488: ++YYCURSOR; -#line 592 "../src/parse/lex.re" +#line 593 "../src/parse/lex.re" { return static_cast('-'); } -#line 2931 "src/parse/lex.cc" +#line 2934 "src/parse/lex.cc" yy490: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '/') goto yy491; if (yych <= '7') goto yy515; yy491: -#line 578 "../src/parse/lex.re" +#line 576 "../src/parse/lex.re" { msg.fatal(loc, "syntax error in octal escape sequence"); } -#line 2940 "src/parse/lex.cc" +#line 2943 "src/parse/lex.cc" yy492: ++YYCURSOR; goto yy491; @@ -2952,9 +2955,9 @@ yy493: if (yych <= 'f') goto yy517; } yy494: -#line 577 "../src/parse/lex.re" +#line 575 "../src/parse/lex.re" { msg.fatal(loc, "syntax error in hexadecimal escape sequence"); } -#line 2958 "src/parse/lex.cc" +#line 2961 "src/parse/lex.cc" yy495: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); @@ -2970,49 +2973,49 @@ yy495: } yy496: ++YYCURSOR; -#line 591 "../src/parse/lex.re" +#line 592 "../src/parse/lex.re" { return static_cast('\\'); } -#line 2976 "src/parse/lex.cc" +#line 2979 "src/parse/lex.cc" yy498: ++YYCURSOR; -#line 593 "../src/parse/lex.re" +#line 594 "../src/parse/lex.re" { return static_cast(']'); } -#line 2981 "src/parse/lex.cc" +#line 2984 "src/parse/lex.cc" yy500: ++YYCURSOR; -#line 584 "../src/parse/lex.re" +#line 585 "../src/parse/lex.re" { return static_cast('\a'); } -#line 2986 "src/parse/lex.cc" +#line 2989 "src/parse/lex.cc" yy502: ++YYCURSOR; -#line 585 "../src/parse/lex.re" +#line 586 "../src/parse/lex.re" { return static_cast('\b'); } -#line 2991 "src/parse/lex.cc" +#line 2994 "src/parse/lex.cc" yy504: ++YYCURSOR; -#line 586 "../src/parse/lex.re" +#line 587 "../src/parse/lex.re" { return static_cast('\f'); } -#line 2996 "src/parse/lex.cc" +#line 2999 "src/parse/lex.cc" yy506: ++YYCURSOR; -#line 587 "../src/parse/lex.re" +#line 588 "../src/parse/lex.re" { return static_cast('\n'); } -#line 3001 "src/parse/lex.cc" +#line 3004 "src/parse/lex.cc" yy508: ++YYCURSOR; -#line 588 "../src/parse/lex.re" +#line 589 "../src/parse/lex.re" { return static_cast('\r'); } -#line 3006 "src/parse/lex.cc" +#line 3009 "src/parse/lex.cc" yy510: ++YYCURSOR; -#line 589 "../src/parse/lex.re" +#line 590 "../src/parse/lex.re" { return static_cast('\t'); } -#line 3011 "src/parse/lex.cc" +#line 3014 "src/parse/lex.cc" yy512: ++YYCURSOR; -#line 590 "../src/parse/lex.re" +#line 591 "../src/parse/lex.re" { return static_cast('\v'); } -#line 3016 "src/parse/lex.cc" +#line 3019 "src/parse/lex.cc" yy514: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); @@ -3075,9 +3078,9 @@ yy519: } yy520: ++YYCURSOR; -#line 583 "../src/parse/lex.re" +#line 584 "../src/parse/lex.re" { return unesc_oct(tok, cur); } -#line 3081 "src/parse/lex.cc" +#line 3084 "src/parse/lex.cc" yy522: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { @@ -3104,9 +3107,9 @@ yy523: } yy524: ++YYCURSOR; -#line 582 "../src/parse/lex.re" +#line 583 "../src/parse/lex.re" { return unesc_hex(tok, cur); } -#line 3110 "src/parse/lex.cc" +#line 3113 "src/parse/lex.cc" yy526: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { @@ -3130,322 +3133,1209 @@ yy527: goto yy516; } } -#line 598 "../src/parse/lex.re" - -} +#line 601 "../src/parse/lex.re" -bool Scanner::lex_str_chr(char quote, ASTChar &ast) -{ - tok = cur; - ast.loc = cur_loc(); - const loc_t &loc = ast.loc; - bool ok = true; - -#line 3145 "src/parse/lex.cc" + } + else { + +#line 3142 "src/parse/lex.cc" { YYCTYPE yych; unsigned int yyaccept = 0; if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10); yych = (YYCTYPE)*YYCURSOR; - if (yych <= '\f') { - if (yych <= 0x00) goto yy530; - if (yych == '\n') goto yy534; - goto yy532; + if (yych <= 0x7F) { + if (yych <= '\f') { + if (yych <= 0x00) goto yy530; + if (yych == '\n') goto yy534; + goto yy532; + } else { + if (yych <= '\r') goto yy536; + if (yych == '\\') goto yy537; + goto yy532; + } } else { - if (yych <= '\r') goto yy536; - if (yych == '\\') goto yy537; - goto yy532; + if (yych <= 0xEF) { + if (yych <= 0xC1) goto yy539; + if (yych <= 0xDF) goto yy541; + if (yych <= 0xE0) goto yy542; + goto yy543; + } else { + if (yych <= 0xF0) goto yy544; + if (yych <= 0xF3) goto yy545; + if (yych <= 0xF4) goto yy546; + goto yy539; + } } yy530: ++YYCURSOR; -#line 614 "../src/parse/lex.re" - { fail_if_eof(); ast.chr = 0; goto end; } -#line 3164 "src/parse/lex.cc" +#line 580 "../src/parse/lex.re" + { fail_if_eof(); return 0; } +#line 3175 "src/parse/lex.cc" yy532: ++YYCURSOR; yy533: -#line 616 "../src/parse/lex.re" - { ok = tok[0] != quote; ast.chr = static_cast(tok[0]); goto end; } -#line 3170 "src/parse/lex.cc" +#line 582 "../src/parse/lex.re" + { return decode(tok); } +#line 3181 "src/parse/lex.cc" yy534: ++YYCURSOR; -#line 609 "../src/parse/lex.re" - { msg.fatal(loc, "newline in character string"); } -#line 3175 "src/parse/lex.cc" +#line 574 "../src/parse/lex.re" + { msg.fatal(loc, "newline in character class"); } +#line 3186 "src/parse/lex.cc" yy536: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy534; goto yy533; yy537: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '`') { - if (yych <= '3') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy538; - if (yych <= '\t') goto yy539; - goto yy534; + yyaccept = 0; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 'b') { + if (yych <= '7') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych >= 0x01) goto yy547; + } else { + if (yych <= '\n') goto yy534; + if (yych <= '\f') goto yy547; + goto yy549; + } } else { - if (yych == '\r') goto yy541; - if (yych <= '/') goto yy539; - goto yy542; + if (yych <= '-') { + if (yych <= ',') goto yy547; + goto yy550; + } else { + if (yych <= '/') goto yy547; + if (yych <= '3') goto yy552; + goto yy554; + } } } else { - if (yych <= 'W') { - if (yych <= '7') goto yy544; - if (yych == 'U') goto yy545; - goto yy539; + if (yych <= '[') { + if (yych <= 'U') { + if (yych <= 'T') goto yy547; + goto yy555; + } else { + if (yych == 'X') goto yy557; + goto yy547; + } } else { - if (yych <= 'X') goto yy547; - if (yych == '\\') goto yy548; - goto yy539; + if (yych <= ']') { + if (yych <= '\\') goto yy558; + goto yy560; + } else { + if (yych <= '`') goto yy547; + if (yych <= 'a') goto yy562; + goto yy564; + } } } } else { - if (yych <= 'q') { - if (yych <= 'e') { - if (yych <= 'a') goto yy550; - if (yych <= 'b') goto yy552; - goto yy539; + if (yych <= 'v') { + if (yych <= 'q') { + if (yych <= 'f') { + if (yych <= 'e') goto yy547; + goto yy566; + } else { + if (yych == 'n') goto yy568; + goto yy547; + } } else { - if (yych <= 'f') goto yy554; - if (yych == 'n') goto yy556; - goto yy539; + if (yych <= 's') { + if (yych <= 'r') goto yy570; + goto yy547; + } else { + if (yych <= 't') goto yy572; + if (yych <= 'u') goto yy557; + goto yy574; + } } } else { - if (yych <= 'u') { - if (yych <= 'r') goto yy558; - if (yych <= 's') goto yy539; - if (yych <= 't') goto yy560; - goto yy547; + if (yych <= 0xDF) { + if (yych <= 'x') { + if (yych <= 'w') goto yy547; + goto yy576; + } else { + if (yych <= 0x7F) goto yy547; + if (yych >= 0xC2) goto yy577; + } } else { - if (yych <= 'v') goto yy562; - if (yych == 'x') goto yy564; - goto yy539; + if (yych <= 0xF0) { + if (yych <= 0xE0) goto yy579; + if (yych <= 0xEF) goto yy580; + goto yy581; + } else { + if (yych <= 0xF3) goto yy582; + if (yych <= 0xF4) goto yy583; + } } } } yy538: -#line 612 "../src/parse/lex.re" +#line 577 "../src/parse/lex.re" { msg.fatal(loc, "syntax error in escape sequence"); } -#line 3231 "src/parse/lex.cc" +#line 3278 "src/parse/lex.cc" yy539: ++YYCURSOR; yy540: -#line 627 "../src/parse/lex.re" - { - const char c = tok[1]; - ast.chr = static_cast(c); - if (tok[1] != quote) { - msg.warn.useless_escape(loc, c); - } - goto end; - } -#line 3244 "src/parse/lex.cc" +#line 578 "../src/parse/lex.re" + { msg.fatal(loc, "syntax error"); } +#line 3284 "src/parse/lex.cc" yy541: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy534; + if (yych <= 0x7F) goto yy540; + if (yych <= 0xBF) goto yy532; goto yy540; yy542: - yyaccept = 0; + yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy543; - if (yych <= '7') goto yy565; + if (yych <= 0x9F) goto yy540; + if (yych <= 0xBF) goto yy584; + goto yy540; yy543: -#line 611 "../src/parse/lex.re" - { msg.fatal(loc, "syntax error in octal escape sequence"); } -#line 3257 "src/parse/lex.cc" + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 0x7F) goto yy540; + if (yych <= 0xBF) goto yy584; + goto yy540; yy544: - ++YYCURSOR; - goto yy543; + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 0x8F) goto yy540; + if (yych <= 0xBF) goto yy585; + goto yy540; yy545: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 0x7F) goto yy540; + if (yych <= 0xBF) goto yy585; + goto yy540; +yy546: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 0x7F) goto yy540; + if (yych <= 0x8F) goto yy585; + goto yy540; +yy547: + ++YYCURSOR; +yy548: +#line 595 "../src/parse/lex.re" + { + msg.warn.useless_escape(loc, tok, cur); + return decode(tok + 1); + } +#line 3328 "src/parse/lex.cc" +yy549: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == '\n') goto yy534; + goto yy548; +yy550: + ++YYCURSOR; +#line 593 "../src/parse/lex.re" + { return static_cast('-'); } +#line 3337 "src/parse/lex.cc" +yy552: + yyaccept = 2; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy553; + if (yych <= '7') goto yy586; +yy553: +#line 576 "../src/parse/lex.re" + { msg.fatal(loc, "syntax error in octal escape sequence"); } +#line 3346 "src/parse/lex.cc" +yy554: + ++YYCURSOR; + goto yy553; +yy555: + yyaccept = 3; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '@') { - if (yych <= '/') goto yy546; - if (yych <= '9') goto yy567; + if (yych <= '/') goto yy556; + if (yych <= '9') goto yy587; } else { - if (yych <= 'F') goto yy567; - if (yych <= '`') goto yy546; - if (yych <= 'f') goto yy567; + if (yych <= 'F') goto yy587; + if (yych <= '`') goto yy556; + if (yych <= 'f') goto yy587; } -yy546: -#line 610 "../src/parse/lex.re" +yy556: +#line 575 "../src/parse/lex.re" { msg.fatal(loc, "syntax error in hexadecimal escape sequence"); } -#line 3275 "src/parse/lex.cc" -yy547: - yyaccept = 1; +#line 3364 "src/parse/lex.cc" +yy557: + yyaccept = 3; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '@') { - if (yych <= '/') goto yy546; - if (yych <= '9') goto yy568; - goto yy546; + if (yych <= '/') goto yy556; + if (yych <= '9') goto yy588; + goto yy556; } else { - if (yych <= 'F') goto yy568; - if (yych <= '`') goto yy546; - if (yych <= 'f') goto yy568; - goto yy546; + if (yych <= 'F') goto yy588; + if (yych <= '`') goto yy556; + if (yych <= 'f') goto yy588; + goto yy556; } -yy548: +yy558: ++YYCURSOR; -#line 626 "../src/parse/lex.re" - { ast.chr = static_cast('\\'); goto end; } -#line 3293 "src/parse/lex.cc" -yy550: +#line 592 "../src/parse/lex.re" + { return static_cast('\\'); } +#line 3382 "src/parse/lex.cc" +yy560: ++YYCURSOR; -#line 619 "../src/parse/lex.re" - { ast.chr = static_cast('\a'); goto end; } -#line 3298 "src/parse/lex.cc" -yy552: +#line 594 "../src/parse/lex.re" + { return static_cast(']'); } +#line 3387 "src/parse/lex.cc" +yy562: ++YYCURSOR; -#line 620 "../src/parse/lex.re" - { ast.chr = static_cast('\b'); goto end; } -#line 3303 "src/parse/lex.cc" -yy554: +#line 585 "../src/parse/lex.re" + { return static_cast('\a'); } +#line 3392 "src/parse/lex.cc" +yy564: ++YYCURSOR; -#line 621 "../src/parse/lex.re" - { ast.chr = static_cast('\f'); goto end; } -#line 3308 "src/parse/lex.cc" -yy556: +#line 586 "../src/parse/lex.re" + { return static_cast('\b'); } +#line 3397 "src/parse/lex.cc" +yy566: + ++YYCURSOR; +#line 587 "../src/parse/lex.re" + { return static_cast('\f'); } +#line 3402 "src/parse/lex.cc" +yy568: + ++YYCURSOR; +#line 588 "../src/parse/lex.re" + { return static_cast('\n'); } +#line 3407 "src/parse/lex.cc" +yy570: + ++YYCURSOR; +#line 589 "../src/parse/lex.re" + { return static_cast('\r'); } +#line 3412 "src/parse/lex.cc" +yy572: + ++YYCURSOR; +#line 590 "../src/parse/lex.re" + { return static_cast('\t'); } +#line 3417 "src/parse/lex.cc" +yy574: + ++YYCURSOR; +#line 591 "../src/parse/lex.re" + { return static_cast('\v'); } +#line 3422 "src/parse/lex.cc" +yy576: + yyaccept = 3; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '@') { + if (yych <= '/') goto yy556; + if (yych <= '9') goto yy589; + goto yy556; + } else { + if (yych <= 'F') goto yy589; + if (yych <= '`') goto yy556; + if (yych <= 'f') goto yy589; + goto yy556; + } +yy577: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy578; + if (yych <= 0xBF) goto yy547; +yy578: + YYCURSOR = YYMARKER; + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy538; + } else { + goto yy540; + } + } else { + if (yyaccept == 2) { + goto yy553; + } else { + goto yy556; + } + } +yy579: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x9F) goto yy578; + if (yych <= 0xBF) goto yy577; + goto yy578; +yy580: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy578; + if (yych <= 0xBF) goto yy577; + goto yy578; +yy581: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x8F) goto yy578; + if (yych <= 0xBF) goto yy580; + goto yy578; +yy582: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy578; + if (yych <= 0xBF) goto yy580; + goto yy578; +yy583: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy578; + if (yych <= 0x8F) goto yy580; + goto yy578; +yy584: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy578; + if (yych <= 0xBF) goto yy532; + goto yy578; +yy585: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy578; + if (yych <= 0xBF) goto yy584; + goto yy578; +yy586: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '/') goto yy578; + if (yych <= '7') goto yy590; + goto yy578; +yy587: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy578; + if (yych <= '9') goto yy592; + goto yy578; + } else { + if (yych <= 'F') goto yy592; + if (yych <= '`') goto yy578; + if (yych <= 'f') goto yy592; + goto yy578; + } +yy588: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy578; + if (yych <= '9') goto yy593; + goto yy578; + } else { + if (yych <= 'F') goto yy593; + if (yych <= '`') goto yy578; + if (yych <= 'f') goto yy593; + goto yy578; + } +yy589: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy578; + if (yych <= '9') goto yy594; + goto yy578; + } else { + if (yych <= 'F') goto yy594; + if (yych <= '`') goto yy578; + if (yych <= 'f') goto yy594; + goto yy578; + } +yy590: ++YYCURSOR; +#line 584 "../src/parse/lex.re" + { return unesc_oct(tok, cur); } +#line 3535 "src/parse/lex.cc" +yy592: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy578; + if (yych <= '9') goto yy596; + goto yy578; + } else { + if (yych <= 'F') goto yy596; + if (yych <= '`') goto yy578; + if (yych <= 'f') goto yy596; + goto yy578; + } +yy593: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy578; + if (yych <= '9') goto yy589; + goto yy578; + } else { + if (yych <= 'F') goto yy589; + if (yych <= '`') goto yy578; + if (yych <= 'f') goto yy589; + goto yy578; + } +yy594: + ++YYCURSOR; +#line 583 "../src/parse/lex.re" + { return unesc_hex(tok, cur); } +#line 3564 "src/parse/lex.cc" +yy596: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy578; + if (yych >= ':') goto yy578; + } else { + if (yych <= 'F') goto yy597; + if (yych <= '`') goto yy578; + if (yych >= 'g') goto yy578; + } +yy597: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy578; + if (yych <= '9') goto yy588; + goto yy578; + } else { + if (yych <= 'F') goto yy588; + if (yych <= '`') goto yy578; + if (yych <= 'f') goto yy588; + goto yy578; + } +} +#line 604 "../src/parse/lex.re" + #line 604 "../src/parse/lex.re" + + } +} + +bool Scanner::lex_str_chr(char quote, ASTChar &ast) +{ + tok = cur; + ast.loc = cur_loc(); + + #line 638 "../src/parse/lex.re" + + if (globopts->input_encoding == Enc::ASCII) { + +#line 3603 "src/parse/lex.cc" +{ + YYCTYPE yych; + unsigned int yyaccept = 0; + if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10); + yych = (YYCTYPE)*YYCURSOR; + if (yych <= '\f') { + if (yych <= 0x00) goto yy600; + if (yych == '\n') goto yy604; + goto yy602; + } else { + if (yych <= '\r') goto yy606; + if (yych == '\\') goto yy607; + goto yy602; + } +yy600: + ++YYCURSOR; +#line 620 "../src/parse/lex.re" + { fail_if_eof(); ast.chr = 0; return true; } +#line 3622 "src/parse/lex.cc" +yy602: + ++YYCURSOR; +yy603: #line 622 "../src/parse/lex.re" - { ast.chr = static_cast('\n'); goto end; } -#line 3313 "src/parse/lex.cc" -yy558: + { ast.chr = decode(tok); return tok[0] != quote; } +#line 3628 "src/parse/lex.cc" +yy604: ++YYCURSOR; -#line 623 "../src/parse/lex.re" - { ast.chr = static_cast('\r'); goto end; } -#line 3318 "src/parse/lex.cc" -yy560: +#line 614 "../src/parse/lex.re" + { msg.fatal(ast.loc, "newline in character string"); } +#line 3633 "src/parse/lex.cc" +yy606: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == '\n') goto yy604; + goto yy603; +yy607: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '`') { + if (yych <= '3') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy608; + if (yych <= '\t') goto yy609; + goto yy604; + } else { + if (yych == '\r') goto yy611; + if (yych <= '/') goto yy609; + goto yy612; + } + } else { + if (yych <= 'W') { + if (yych <= '7') goto yy614; + if (yych == 'U') goto yy615; + goto yy609; + } else { + if (yych <= 'X') goto yy617; + if (yych == '\\') goto yy618; + goto yy609; + } + } + } else { + if (yych <= 'q') { + if (yych <= 'e') { + if (yych <= 'a') goto yy620; + if (yych <= 'b') goto yy622; + goto yy609; + } else { + if (yych <= 'f') goto yy624; + if (yych == 'n') goto yy626; + goto yy609; + } + } else { + if (yych <= 'u') { + if (yych <= 'r') goto yy628; + if (yych <= 's') goto yy609; + if (yych <= 't') goto yy630; + goto yy617; + } else { + if (yych <= 'v') goto yy632; + if (yych == 'x') goto yy634; + goto yy609; + } + } + } +yy608: +#line 617 "../src/parse/lex.re" + { msg.fatal(ast.loc, "syntax error in escape sequence"); } +#line 3689 "src/parse/lex.cc" +yy609: ++YYCURSOR; -#line 624 "../src/parse/lex.re" - { ast.chr = static_cast('\t'); goto end; } -#line 3323 "src/parse/lex.cc" -yy562: +yy610: +#line 633 "../src/parse/lex.re" + { + ast.chr = decode(tok + 1); + if (tok[1] != quote) msg.warn.useless_escape(ast.loc, tok, cur); + return true; + } +#line 3699 "src/parse/lex.cc" +yy611: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == '\n') goto yy604; + goto yy610; +yy612: + yyaccept = 0; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy613; + if (yych <= '7') goto yy635; +yy613: +#line 616 "../src/parse/lex.re" + { msg.fatal(ast.loc, "syntax error in octal escape sequence"); } +#line 3712 "src/parse/lex.cc" +yy614: + ++YYCURSOR; + goto yy613; +yy615: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '@') { + if (yych <= '/') goto yy616; + if (yych <= '9') goto yy637; + } else { + if (yych <= 'F') goto yy637; + if (yych <= '`') goto yy616; + if (yych <= 'f') goto yy637; + } +yy616: +#line 615 "../src/parse/lex.re" + { msg.fatal(ast.loc, "syntax error in hexadecimal escape sequence"); } +#line 3730 "src/parse/lex.cc" +yy617: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '@') { + if (yych <= '/') goto yy616; + if (yych <= '9') goto yy638; + goto yy616; + } else { + if (yych <= 'F') goto yy638; + if (yych <= '`') goto yy616; + if (yych <= 'f') goto yy638; + goto yy616; + } +yy618: + ++YYCURSOR; +#line 632 "../src/parse/lex.re" + { ast.chr = static_cast('\\'); return true; } +#line 3748 "src/parse/lex.cc" +yy620: ++YYCURSOR; #line 625 "../src/parse/lex.re" - { ast.chr = static_cast('\v'); goto end; } -#line 3328 "src/parse/lex.cc" -yy564: + { ast.chr = static_cast('\a'); return true; } +#line 3753 "src/parse/lex.cc" +yy622: + ++YYCURSOR; +#line 626 "../src/parse/lex.re" + { ast.chr = static_cast('\b'); return true; } +#line 3758 "src/parse/lex.cc" +yy624: + ++YYCURSOR; +#line 627 "../src/parse/lex.re" + { ast.chr = static_cast('\f'); return true; } +#line 3763 "src/parse/lex.cc" +yy626: + ++YYCURSOR; +#line 628 "../src/parse/lex.re" + { ast.chr = static_cast('\n'); return true; } +#line 3768 "src/parse/lex.cc" +yy628: + ++YYCURSOR; +#line 629 "../src/parse/lex.re" + { ast.chr = static_cast('\r'); return true; } +#line 3773 "src/parse/lex.cc" +yy630: + ++YYCURSOR; +#line 630 "../src/parse/lex.re" + { ast.chr = static_cast('\t'); return true; } +#line 3778 "src/parse/lex.cc" +yy632: + ++YYCURSOR; +#line 631 "../src/parse/lex.re" + { ast.chr = static_cast('\v'); return true; } +#line 3783 "src/parse/lex.cc" +yy634: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '@') { - if (yych <= '/') goto yy546; - if (yych <= '9') goto yy569; - goto yy546; + if (yych <= '/') goto yy616; + if (yych <= '9') goto yy639; + goto yy616; } else { - if (yych <= 'F') goto yy569; - if (yych <= '`') goto yy546; - if (yych <= 'f') goto yy569; - goto yy546; + if (yych <= 'F') goto yy639; + if (yych <= '`') goto yy616; + if (yych <= 'f') goto yy639; + goto yy616; } -yy565: +yy635: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '/') goto yy566; - if (yych <= '7') goto yy570; -yy566: + if (yych <= '/') goto yy636; + if (yych <= '7') goto yy640; +yy636: YYCURSOR = YYMARKER; if (yyaccept == 0) { - goto yy543; + goto yy613; } else { - goto yy546; + goto yy616; } -yy567: +yy637: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy566; - if (yych <= '9') goto yy572; - goto yy566; + if (yych <= '/') goto yy636; + if (yych <= '9') goto yy642; + goto yy636; } else { - if (yych <= 'F') goto yy572; - if (yych <= '`') goto yy566; - if (yych <= 'f') goto yy572; - goto yy566; + if (yych <= 'F') goto yy642; + if (yych <= '`') goto yy636; + if (yych <= 'f') goto yy642; + goto yy636; } -yy568: +yy638: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy566; - if (yych <= '9') goto yy573; - goto yy566; + if (yych <= '/') goto yy636; + if (yych <= '9') goto yy643; + goto yy636; } else { - if (yych <= 'F') goto yy573; - if (yych <= '`') goto yy566; - if (yych <= 'f') goto yy573; - goto yy566; + if (yych <= 'F') goto yy643; + if (yych <= '`') goto yy636; + if (yych <= 'f') goto yy643; + goto yy636; } -yy569: +yy639: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy566; - if (yych <= '9') goto yy574; - goto yy566; + if (yych <= '/') goto yy636; + if (yych <= '9') goto yy644; + goto yy636; } else { - if (yych <= 'F') goto yy574; - if (yych <= '`') goto yy566; - if (yych <= 'f') goto yy574; - goto yy566; + if (yych <= 'F') goto yy644; + if (yych <= '`') goto yy636; + if (yych <= 'f') goto yy644; + goto yy636; } -yy570: +yy640: ++YYCURSOR; -#line 618 "../src/parse/lex.re" - { ast.chr = unesc_oct(tok, cur); goto end; } -#line 3393 "src/parse/lex.cc" -yy572: +#line 624 "../src/parse/lex.re" + { ast.chr = unesc_oct(tok, cur); return true; } +#line 3848 "src/parse/lex.cc" +yy642: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy566; - if (yych <= '9') goto yy576; - goto yy566; + if (yych <= '/') goto yy636; + if (yych <= '9') goto yy646; + goto yy636; } else { - if (yych <= 'F') goto yy576; - if (yych <= '`') goto yy566; - if (yych <= 'f') goto yy576; - goto yy566; + if (yych <= 'F') goto yy646; + if (yych <= '`') goto yy636; + if (yych <= 'f') goto yy646; + goto yy636; } -yy573: +yy643: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy566; - if (yych <= '9') goto yy569; - goto yy566; + if (yych <= '/') goto yy636; + if (yych <= '9') goto yy639; + goto yy636; } else { - if (yych <= 'F') goto yy569; - if (yych <= '`') goto yy566; - if (yych <= 'f') goto yy569; - goto yy566; + if (yych <= 'F') goto yy639; + if (yych <= '`') goto yy636; + if (yych <= 'f') goto yy639; + goto yy636; } -yy574: +yy644: ++YYCURSOR; +#line 623 "../src/parse/lex.re" + { ast.chr = unesc_hex(tok, cur); return true; } +#line 3877 "src/parse/lex.cc" +yy646: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy636; + if (yych >= ':') goto yy636; + } else { + if (yych <= 'F') goto yy647; + if (yych <= '`') goto yy636; + if (yych >= 'g') goto yy636; + } +yy647: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy636; + if (yych <= '9') goto yy638; + goto yy636; + } else { + if (yych <= 'F') goto yy638; + if (yych <= '`') goto yy636; + if (yych <= 'f') goto yy638; + goto yy636; + } +} +#line 640 "../src/parse/lex.re" + + } + else { + +#line 3906 "src/parse/lex.cc" +{ + YYCTYPE yych; + unsigned int yyaccept = 0; + if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10); + yych = (YYCTYPE)*YYCURSOR; + if (yych <= 0x7F) { + if (yych <= '\f') { + if (yych <= 0x00) goto yy650; + if (yych == '\n') goto yy654; + goto yy652; + } else { + if (yych <= '\r') goto yy656; + if (yych == '\\') goto yy657; + goto yy652; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xC1) goto yy659; + if (yych <= 0xDF) goto yy661; + if (yych <= 0xE0) goto yy662; + goto yy663; + } else { + if (yych <= 0xF0) goto yy664; + if (yych <= 0xF3) goto yy665; + if (yych <= 0xF4) goto yy666; + goto yy659; + } + } +yy650: + ++YYCURSOR; +#line 620 "../src/parse/lex.re" + { fail_if_eof(); ast.chr = 0; return true; } +#line 3939 "src/parse/lex.cc" +yy652: + ++YYCURSOR; +yy653: +#line 622 "../src/parse/lex.re" + { ast.chr = decode(tok); return tok[0] != quote; } +#line 3945 "src/parse/lex.cc" +yy654: + ++YYCURSOR; +#line 614 "../src/parse/lex.re" + { msg.fatal(ast.loc, "newline in character string"); } +#line 3950 "src/parse/lex.cc" +yy656: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == '\n') goto yy654; + goto yy653; +yy657: + yyaccept = 0; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 'f') { + if (yych <= 'T') { + if (yych <= '\f') { + if (yych <= 0x00) goto yy658; + if (yych == '\n') goto yy654; + goto yy667; + } else { + if (yych <= '/') { + if (yych <= '\r') goto yy669; + goto yy667; + } else { + if (yych <= '3') goto yy670; + if (yych <= '7') goto yy672; + goto yy667; + } + } + } else { + if (yych <= '\\') { + if (yych <= 'W') { + if (yych <= 'U') goto yy673; + goto yy667; + } else { + if (yych <= 'X') goto yy675; + if (yych <= '[') goto yy667; + goto yy676; + } + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy667; + goto yy678; + } else { + if (yych <= 'b') goto yy680; + if (yych <= 'e') goto yy667; + goto yy682; + } + } + } + } else { + if (yych <= 'w') { + if (yych <= 'r') { + if (yych == 'n') goto yy684; + if (yych <= 'q') goto yy667; + goto yy686; + } else { + if (yych <= 't') { + if (yych <= 's') goto yy667; + goto yy688; + } else { + if (yych <= 'u') goto yy675; + if (yych <= 'v') goto yy690; + goto yy667; + } + } + } else { + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych <= 'x') goto yy692; + goto yy667; + } else { + if (yych <= 0xC1) goto yy658; + if (yych <= 0xDF) goto yy693; + goto yy695; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy696; + goto yy697; + } else { + if (yych <= 0xF3) goto yy698; + if (yych <= 0xF4) goto yy699; + } + } + } + } +yy658: #line 617 "../src/parse/lex.re" - { ast.chr = unesc_hex(tok, cur); goto end; } -#line 3422 "src/parse/lex.cc" -yy576: + { msg.fatal(ast.loc, "syntax error in escape sequence"); } +#line 4035 "src/parse/lex.cc" +yy659: + ++YYCURSOR; +yy660: +#line 618 "../src/parse/lex.re" + { msg.fatal(ast.loc, "syntax error"); } +#line 4041 "src/parse/lex.cc" +yy661: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy660; + if (yych <= 0xBF) goto yy652; + goto yy660; +yy662: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 0x9F) goto yy660; + if (yych <= 0xBF) goto yy700; + goto yy660; +yy663: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 0x7F) goto yy660; + if (yych <= 0xBF) goto yy700; + goto yy660; +yy664: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 0x8F) goto yy660; + if (yych <= 0xBF) goto yy701; + goto yy660; +yy665: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 0x7F) goto yy660; + if (yych <= 0xBF) goto yy701; + goto yy660; +yy666: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= 0x7F) goto yy660; + if (yych <= 0x8F) goto yy701; + goto yy660; +yy667: + ++YYCURSOR; +yy668: +#line 633 "../src/parse/lex.re" + { + ast.chr = decode(tok + 1); + if (tok[1] != quote) msg.warn.useless_escape(ast.loc, tok, cur); + return true; + } +#line 4086 "src/parse/lex.cc" +yy669: yych = (YYCTYPE)*++YYCURSOR; + if (yych == '\n') goto yy654; + goto yy668; +yy670: + yyaccept = 2; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy671; + if (yych <= '7') goto yy702; +yy671: +#line 616 "../src/parse/lex.re" + { msg.fatal(ast.loc, "syntax error in octal escape sequence"); } +#line 4099 "src/parse/lex.cc" +yy672: + ++YYCURSOR; + goto yy671; +yy673: + yyaccept = 3; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '@') { - if (yych <= '/') goto yy566; - if (yych >= ':') goto yy566; + if (yych <= '/') goto yy674; + if (yych <= '9') goto yy703; } else { - if (yych <= 'F') goto yy577; - if (yych <= '`') goto yy566; - if (yych >= 'g') goto yy566; + if (yych <= 'F') goto yy703; + if (yych <= '`') goto yy674; + if (yych <= 'f') goto yy703; } -yy577: +yy674: +#line 615 "../src/parse/lex.re" + { msg.fatal(ast.loc, "syntax error in hexadecimal escape sequence"); } +#line 4117 "src/parse/lex.cc" +yy675: + yyaccept = 3; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '@') { + if (yych <= '/') goto yy674; + if (yych <= '9') goto yy704; + goto yy674; + } else { + if (yych <= 'F') goto yy704; + if (yych <= '`') goto yy674; + if (yych <= 'f') goto yy704; + goto yy674; + } +yy676: + ++YYCURSOR; +#line 632 "../src/parse/lex.re" + { ast.chr = static_cast('\\'); return true; } +#line 4135 "src/parse/lex.cc" +yy678: + ++YYCURSOR; +#line 625 "../src/parse/lex.re" + { ast.chr = static_cast('\a'); return true; } +#line 4140 "src/parse/lex.cc" +yy680: + ++YYCURSOR; +#line 626 "../src/parse/lex.re" + { ast.chr = static_cast('\b'); return true; } +#line 4145 "src/parse/lex.cc" +yy682: + ++YYCURSOR; +#line 627 "../src/parse/lex.re" + { ast.chr = static_cast('\f'); return true; } +#line 4150 "src/parse/lex.cc" +yy684: + ++YYCURSOR; +#line 628 "../src/parse/lex.re" + { ast.chr = static_cast('\n'); return true; } +#line 4155 "src/parse/lex.cc" +yy686: + ++YYCURSOR; +#line 629 "../src/parse/lex.re" + { ast.chr = static_cast('\r'); return true; } +#line 4160 "src/parse/lex.cc" +yy688: + ++YYCURSOR; +#line 630 "../src/parse/lex.re" + { ast.chr = static_cast('\t'); return true; } +#line 4165 "src/parse/lex.cc" +yy690: + ++YYCURSOR; +#line 631 "../src/parse/lex.re" + { ast.chr = static_cast('\v'); return true; } +#line 4170 "src/parse/lex.cc" +yy692: + yyaccept = 3; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '@') { + if (yych <= '/') goto yy674; + if (yych <= '9') goto yy705; + goto yy674; + } else { + if (yych <= 'F') goto yy705; + if (yych <= '`') goto yy674; + if (yych <= 'f') goto yy705; + goto yy674; + } +yy693: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy694; + if (yych <= 0xBF) goto yy667; +yy694: + YYCURSOR = YYMARKER; + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy658; + } else { + goto yy660; + } + } else { + if (yyaccept == 2) { + goto yy671; + } else { + goto yy674; + } + } +yy695: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x9F) goto yy694; + if (yych <= 0xBF) goto yy693; + goto yy694; +yy696: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy694; + if (yych <= 0xBF) goto yy693; + goto yy694; +yy697: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x8F) goto yy694; + if (yych <= 0xBF) goto yy696; + goto yy694; +yy698: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy694; + if (yych <= 0xBF) goto yy696; + goto yy694; +yy699: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy694; + if (yych <= 0x8F) goto yy696; + goto yy694; +yy700: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy694; + if (yych <= 0xBF) goto yy652; + goto yy694; +yy701: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= 0x7F) goto yy694; + if (yych <= 0xBF) goto yy700; + goto yy694; +yy702: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '/') goto yy694; + if (yych <= '7') goto yy706; + goto yy694; +yy703: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy694; + if (yych <= '9') goto yy708; + goto yy694; + } else { + if (yych <= 'F') goto yy708; + if (yych <= '`') goto yy694; + if (yych <= 'f') goto yy708; + goto yy694; + } +yy704: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy694; + if (yych <= '9') goto yy709; + goto yy694; + } else { + if (yych <= 'F') goto yy709; + if (yych <= '`') goto yy694; + if (yych <= 'f') goto yy709; + goto yy694; + } +yy705: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy694; + if (yych <= '9') goto yy710; + goto yy694; + } else { + if (yych <= 'F') goto yy710; + if (yych <= '`') goto yy694; + if (yych <= 'f') goto yy710; + goto yy694; + } +yy706: + ++YYCURSOR; +#line 624 "../src/parse/lex.re" + { ast.chr = unesc_oct(tok, cur); return true; } +#line 4283 "src/parse/lex.cc" +yy708: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy694; + if (yych <= '9') goto yy712; + goto yy694; + } else { + if (yych <= 'F') goto yy712; + if (yych <= '`') goto yy694; + if (yych <= 'f') goto yy712; + goto yy694; + } +yy709: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy566; - if (yych <= '9') goto yy568; - goto yy566; + if (yych <= '/') goto yy694; + if (yych <= '9') goto yy705; + goto yy694; } else { - if (yych <= 'F') goto yy568; - if (yych <= '`') goto yy566; - if (yych <= 'f') goto yy568; - goto yy566; + if (yych <= 'F') goto yy705; + if (yych <= '`') goto yy694; + if (yych <= 'f') goto yy705; + goto yy694; + } +yy710: + ++YYCURSOR; +#line 623 "../src/parse/lex.re" + { ast.chr = unesc_hex(tok, cur); return true; } +#line 4312 "src/parse/lex.cc" +yy712: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy694; + if (yych >= ':') goto yy694; + } else { + if (yych <= 'F') goto yy713; + if (yych <= '`') goto yy694; + if (yych >= 'g') goto yy694; + } +yy713: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy694; + if (yych <= '9') goto yy704; + goto yy694; + } else { + if (yych <= 'F') goto yy704; + if (yych <= '`') goto yy694; + if (yych <= 'f') goto yy704; + goto yy694; } } -#line 635 "../src/parse/lex.re" +#line 643 "../src/parse/lex.re" + #line 643 "../src/parse/lex.re" -end: - return ok; + } } const AST *Scanner::lex_str(char quote) @@ -3466,7 +4356,7 @@ void Scanner::set_sourceline () sourceline: tok = cur; -#line 3470 "src/parse/lex.cc" +#line 4360 "src/parse/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -3507,54 +4397,54 @@ sourceline: yych = (YYCTYPE)*YYCURSOR; if (yych <= '\r') { if (yych <= '\t') { - if (yych >= 0x01) goto yy582; + if (yych >= 0x01) goto yy718; } else { - if (yych <= '\n') goto yy584; - if (yych <= '\f') goto yy582; - goto yy586; + if (yych <= '\n') goto yy720; + if (yych <= '\f') goto yy718; + goto yy722; } } else { if (yych <= '"') { - if (yych <= '!') goto yy582; - goto yy587; + if (yych <= '!') goto yy718; + goto yy723; } else { - if (yych <= '0') goto yy582; - if (yych <= '9') goto yy588; - goto yy582; + if (yych <= '0') goto yy718; + if (yych <= '9') goto yy724; + goto yy718; } } ++YYCURSOR; -#line 678 "../src/parse/lex.re" +#line 685 "../src/parse/lex.re" { --cur; return; } -#line 3530 "src/parse/lex.cc" -yy582: +#line 4420 "src/parse/lex.cc" +yy718: ++YYCURSOR; -yy583: -#line 679 "../src/parse/lex.re" +yy719: +#line 686 "../src/parse/lex.re" { goto sourceline; } -#line 3536 "src/parse/lex.cc" -yy584: +#line 4426 "src/parse/lex.cc" +yy720: ++YYCURSOR; -#line 677 "../src/parse/lex.re" +#line 684 "../src/parse/lex.re" { pos = tok = cur; return; } -#line 3541 "src/parse/lex.cc" -yy586: +#line 4431 "src/parse/lex.cc" +yy722: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy584; - goto yy583; -yy587: + if (yych == '\n') goto yy720; + goto yy719; +yy723: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= 0x00) goto yy583; - if (yych == '\n') goto yy583; - goto yy592; -yy588: + if (yych <= 0x00) goto yy719; + if (yych == '\n') goto yy719; + goto yy728; +yy724: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 64) { - goto yy588; + goto yy724; } -#line 658 "../src/parse/lex.re" +#line 665 "../src/parse/lex.re" { uint32_t l; if (!s_to_u32_unsafe(tok, cur, l)) { @@ -3563,24 +4453,24 @@ yy588: set_line(l); goto sourceline; } -#line 3567 "src/parse/lex.cc" -yy591: +#line 4457 "src/parse/lex.cc" +yy727: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy592: +yy728: if (yybm[0+yych] & 128) { - goto yy591; + goto yy727; } - if (yych <= '\n') goto yy593; - if (yych <= '"') goto yy594; - goto yy596; -yy593: + if (yych <= '\n') goto yy729; + if (yych <= '"') goto yy730; + goto yy732; +yy729: YYCURSOR = YYMARKER; - goto yy583; -yy594: + goto yy719; +yy730: ++YYCURSOR; -#line 667 "../src/parse/lex.re" +#line 674 "../src/parse/lex.re" { Input &in = get_input(); std::string &name = in.escaped_name; @@ -3590,16 +4480,16 @@ yy594: msg.filenames.push_back(name); goto sourceline; } -#line 3594 "src/parse/lex.cc" -yy596: +#line 4484 "src/parse/lex.cc" +yy732: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych <= 0x00) goto yy593; - if (yych == '\n') goto yy593; - goto yy591; + if (yych <= 0x00) goto yy729; + if (yych == '\n') goto yy729; + goto yy727; } -#line 680 "../src/parse/lex.re" +#line 687 "../src/parse/lex.re" } diff --git a/bootstrap/src/parse/lex.h b/bootstrap/src/parse/lex.h index 9d8ee86b..b7fc26ea 100644 --- a/bootstrap/src/parse/lex.h +++ b/bootstrap/src/parse/lex.h @@ -1,4 +1,4 @@ -/* Generated by re2c 1.1.1 on Tue Feb 19 16:29:01 2019 */ +/* Generated by re2c 1.1.1 on Fri May 24 12:40:10 2019 */ #include #include "src/util/forbid_copy.h" diff --git a/src/encoding/utf8/utf8.cc b/src/encoding/utf8/utf8.cc index e0bf1a77..b9906d99 100644 --- a/src/encoding/utf8/utf8.cc +++ b/src/encoding/utf8/utf8.cc @@ -15,6 +15,7 @@ const uint32_t utf8::INFIX = 0x80u; // 1000 0000 const uint32_t utf8::PREFIX_2BYTE = 0xC0u; // 1100 0000 const uint32_t utf8::PREFIX_3BYTE = 0xE0u; // 1110 0000 const uint32_t utf8::PREFIX_4BYTE = 0xF0u; // 1111 0000 +const uint32_t utf8::PREFIX_5BYTE = 0xF8u; // 1111 1000 const uint32_t utf8::SHIFT = 6u; const uint32_t utf8::MASK = 0x3Fu; // 0011 1111 @@ -61,6 +62,32 @@ uint32_t utf8::rune_to_bytes(uint32_t *str, rune c) return 4; } +// this function assumes that the input has been validated +uint32_t utf8::decode_unsafe(const char *str) +{ + // 1-unit sequence: 0-0x7F => 0xxxxxxx + const uint32_t c = (uint8_t)str[0]; + if (c < INFIX) + return c; + + // 2-unit sequence: 0x80-0x7FF => 110xxxxx 10xxxxxx + const uint32_t c1 = (uint8_t)str[1] ^ INFIX; + if (c < PREFIX_3BYTE) + return ((c << SHIFT) | c1) & MAX_2BYTE_RUNE; + + // 3-unit sequence: 0x800 - 0xFFFF => 1110xxxx 10xxxxxx 10xxxxxx + const uint32_t c2 = (uint8_t)str[2] ^ INFIX; + if (c < PREFIX_4BYTE) + return ((((c << SHIFT) | c1) << SHIFT) | c2) & MAX_3BYTE_RUNE; + + // 4-unit sequence (21-bit value): 0x10000 - 0x1FFFFF => 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + const uint32_t c3 = (uint8_t)str[3] ^ INFIX; + if (c < PREFIX_5BYTE) + return ((((((c << SHIFT) | c1) << SHIFT) | c2) << SHIFT) | c3) & MAX_4BYTE_RUNE; + + return ERROR; +} + uint32_t utf8::rune_length(rune r) { if (r <= MAX_2BYTE_RUNE) diff --git a/src/encoding/utf8/utf8.h b/src/encoding/utf8/utf8.h index efb0a309..1f593e2e 100644 --- a/src/encoding/utf8/utf8.h +++ b/src/encoding/utf8/utf8.h @@ -29,6 +29,7 @@ public: static const uint32_t PREFIX_2BYTE; static const uint32_t PREFIX_3BYTE; static const uint32_t PREFIX_4BYTE; + static const uint32_t PREFIX_5BYTE; static const uint32_t SHIFT; static const uint32_t MASK; @@ -36,6 +37,9 @@ public: // UTF-8 bytestring for given Unicode rune static uint32_t rune_to_bytes(uint32_t * s, rune r); + // read Unicode rune for the given (pre-validated) UTF-8 bytestring + static uint32_t decode_unsafe(const char *str); + // length of UTF-8 bytestring for given Unicode rune static uint32_t rune_length(rune r); diff --git a/src/msg/warn.cc b/src/msg/warn.cc index 83d02105..5634d92f 100644 --- a/src/msg/warn.cc +++ b/src/msg/warn.cc @@ -208,13 +208,13 @@ void Warn::unreachable_rule(const std::string &cond, const Rule &rule) } } -void Warn::useless_escape(const loc_t &loc, char c) +void Warn::useless_escape(const loc_t &loc, const char *str, const char *end) { if (mask[USELESS_ESCAPE] & WARNING) { const bool e = mask[USELESS_ESCAPE] & ERROR; error_accuml |= e; msg.warning(names[USELESS_ESCAPE], loc, e - , "escape has no effect: '\\%c'", c); + , "escape has no effect: '%.*s'", (int)(end - str), str); } } diff --git a/src/msg/warn.h b/src/msg/warn.h index 949bdeb2..90b60734 100644 --- a/src/msg/warn.h +++ b/src/msg/warn.h @@ -69,7 +69,7 @@ public: void swapped_range(const loc_t &loc, uint32_t l, uint32_t u); void undefined_control_flow(const Skeleton &skel, std::vector & paths, bool overflow); void unreachable_rule(const std::string & cond, const Rule &rule); - void useless_escape(const loc_t &loc, char c); + void useless_escape(const loc_t &loc, const char *str, const char *end); }; } // namespace re2c diff --git a/src/options/opt.h b/src/options/opt.h index 2733842b..a502fdce 100644 --- a/src/options/opt.h +++ b/src/options/opt.h @@ -52,6 +52,8 @@ const uint32_t NOEOF = ~0u - 1; CONSTOPT (bool, verbose, false) \ /* include paths */ \ CONSTOPT (std::vector, incpaths, std::vector()) \ + /* input encoding */ \ + CONSTOPT (Enc::type_t, input_encoding, Enc::ASCII) \ /* internals */ \ CONSTOPT (dfa_minimization_t, dfa_minimization, DFA_MINIMIZATION_MOORE) \ CONSTOPT (posix_closure_t, posix_closure, POSIX_CLOSURE_GOR1) \ diff --git a/src/options/parse_opts.re b/src/options/parse_opts.re index db6760d5..e420536c 100644 --- a/src/options/parse_opts.re +++ b/src/options/parse_opts.re @@ -175,6 +175,7 @@ opt_long: "input" end { NEXT_ARG("--input", opt_input); } "empty-class" end { NEXT_ARG("--empty-class", opt_empty_class); } "location-format" end { NEXT_ARG("--location-format", opt_location_format); } + "input-encoding" end { NEXT_ARG("--input-encoding", opt_input_encoding); } "single-pass" end { goto opt; } // deprecated @@ -245,6 +246,13 @@ opt_location_format: "msvc" end { msg.locfmt = LOCFMT_MSVC; goto opt; } */ +opt_input_encoding: +/*!re2c + * { ERRARG("--input-encoding", "ascii | utf8", *argv); } + "ascii" end { globopts.input_encoding = Enc::ASCII; goto opt; } + "utf8" end { globopts.input_encoding = Enc::UTF8; goto opt; } +*/ + opt_dfa_minimization: /*!re2c * { ERRARG("--dfa-minimization", "table | moore", *argv); } diff --git a/src/parse/lex.re b/src/parse/lex.re index eb0fd564..518b891c 100644 --- a/src/parse/lex.re +++ b/src/parse/lex.re @@ -570,15 +570,16 @@ uint32_t Scanner::lex_cls_chr() { tok = cur; const loc_t &loc = cur_loc(); -/*!re2c - * { msg.fatal(loc, "syntax error"); } - eof { fail_if_eof(); return 0; } + /*!rules:re2c esc? eol { msg.fatal(loc, "newline in character class"); } esc [xXuU] { msg.fatal(loc, "syntax error in hexadecimal escape sequence"); } esc [0-7] { msg.fatal(loc, "syntax error in octal escape sequence"); } esc { msg.fatal(loc, "syntax error in escape sequence"); } + * { msg.fatal(loc, "syntax error"); } + + eof { fail_if_eof(); return 0; } - . \ esc { return static_cast(tok[0]); } + . \ esc { return decode(tok); } esc_hex { return unesc_hex(tok, cur); } esc_oct { return unesc_oct(tok, cur); } esc "a" { return static_cast('\a'); } @@ -592,49 +593,55 @@ uint32_t Scanner::lex_cls_chr() esc "-" { return static_cast('-'); } esc "]" { return static_cast(']'); } esc (.\eof){ - msg.warn.useless_escape(loc, tok[1]); - return static_cast(tok[1]); + msg.warn.useless_escape(loc, tok, cur); + return decode(tok + 1); + } + */ + if (globopts->input_encoding == Enc::ASCII) { + /*!use:re2c*/ + } + else { + /*!use:re2c re2c:flags:8 = 1; */ /*!re2c re2c:flags:8 = 0; */ } -*/ } bool Scanner::lex_str_chr(char quote, ASTChar &ast) { tok = cur; ast.loc = cur_loc(); - const loc_t &loc = ast.loc; - bool ok = true; -/*!re2c - * { msg.fatal(loc, "syntax error"); } - esc? eol { msg.fatal(loc, "newline in character string"); } - esc [xXuU] { msg.fatal(loc, "syntax error in hexadecimal escape sequence"); } - esc [0-7] { msg.fatal(loc, "syntax error in octal escape sequence"); } - esc { msg.fatal(loc, "syntax error in escape sequence"); } - eof { fail_if_eof(); ast.chr = 0; goto end; } - - . \ esc { ok = tok[0] != quote; ast.chr = static_cast(tok[0]); goto end; } - esc_hex { ast.chr = unesc_hex(tok, cur); goto end; } - esc_oct { ast.chr = unesc_oct(tok, cur); goto end; } - esc "a" { ast.chr = static_cast('\a'); goto end; } - esc "b" { ast.chr = static_cast('\b'); goto end; } - esc "f" { ast.chr = static_cast('\f'); goto end; } - esc "n" { ast.chr = static_cast('\n'); goto end; } - esc "r" { ast.chr = static_cast('\r'); goto end; } - esc "t" { ast.chr = static_cast('\t'); goto end; } - esc "v" { ast.chr = static_cast('\v'); goto end; } - esc "\\" { ast.chr = static_cast('\\'); goto end; } + /*!rules:re2c + esc? eol { msg.fatal(ast.loc, "newline in character string"); } + esc [xXuU] { msg.fatal(ast.loc, "syntax error in hexadecimal escape sequence"); } + esc [0-7] { msg.fatal(ast.loc, "syntax error in octal escape sequence"); } + esc { msg.fatal(ast.loc, "syntax error in escape sequence"); } + * { msg.fatal(ast.loc, "syntax error"); } + + eof { fail_if_eof(); ast.chr = 0; return true; } + + . \ esc { ast.chr = decode(tok); return tok[0] != quote; } + esc_hex { ast.chr = unesc_hex(tok, cur); return true; } + esc_oct { ast.chr = unesc_oct(tok, cur); return true; } + esc "a" { ast.chr = static_cast('\a'); return true; } + esc "b" { ast.chr = static_cast('\b'); return true; } + esc "f" { ast.chr = static_cast('\f'); return true; } + esc "n" { ast.chr = static_cast('\n'); return true; } + esc "r" { ast.chr = static_cast('\r'); return true; } + esc "t" { ast.chr = static_cast('\t'); return true; } + esc "v" { ast.chr = static_cast('\v'); return true; } + esc "\\" { ast.chr = static_cast('\\'); return true; } esc (.\eof){ - const char c = tok[1]; - ast.chr = static_cast(c); - if (tok[1] != quote) { - msg.warn.useless_escape(loc, c); - } - goto end; + ast.chr = decode(tok + 1); + if (tok[1] != quote) msg.warn.useless_escape(ast.loc, tok, cur); + return true; + } + */ + if (globopts->input_encoding == Enc::ASCII) { + /*!use:re2c*/ + } + else { + /*!use:re2c re2c:flags:8 = 1; */ /*!re2c re2c:flags:8 = 0; */ } -*/ -end: - return ok; } const AST *Scanner::lex_str(char quote) diff --git a/src/parse/scanner.h b/src/parse/scanner.h index edd455c3..051e80ad 100644 --- a/src/parse/scanner.h +++ b/src/parse/scanner.h @@ -13,6 +13,7 @@ #include "src/parse/lex.h" #include "src/options/opt.h" #include "src/encoding/enc.h" +#include "src/encoding/utf8/utf8.h" #include "src/util/attribute.h" #include "src/util/forbid_copy.h" @@ -87,6 +88,7 @@ private: std::string lex_conf_string(); bool is_eof() const; void fail_if_eof() const; + uint32_t decode(const char *str) const; FORBID_COPY (Scanner); }; @@ -142,6 +144,13 @@ inline const Input& Scanner::get_cinput() const return *files[get_input_index()]; } +inline uint32_t Scanner::decode(const char *str) const +{ + return globopts->input_encoding == Enc::ASCII + ? static_cast(str[0]) + : utf8::decode_unsafe(str); +} + } // end namespace re2c #endif // _RE2C_AST_SCANNER_ diff --git a/test/encodings/utf8_literals.i8--input-encoding(utf8).c b/test/encodings/utf8_literals.i8--input-encoding(utf8).c new file mode 100644 index 00000000..dec2a58d --- /dev/null +++ b/test/encodings/utf8_literals.i8--input-encoding(utf8).c @@ -0,0 +1,292 @@ +/* Generated by re2c */ +#include + +int lex(const char *YYCURSOR) +{ +#define YYCTYPE unsigned char + const char *YYMARKER; + + +{ + YYCTYPE yych; + yych = *YYCURSOR; + switch (yych) { + case 0xD0: goto yy4; + case 0xD1: goto yy5; + default: goto yy2; + } +yy2: + ++YYCURSOR; +yy3: + { return -1; } +yy4: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 0x90: goto yy6; + case 0x9C: goto yy8; + case 0xA1: goto yy9; + case 0xA3: goto yy10; + default: goto yy3; + } +yy5: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 0x81: goto yy9; + default: goto yy3; + } +yy6: + yych = *++YYCURSOR; + switch (yych) { + case 0xD0: goto yy11; + default: goto yy7; + } +yy7: + YYCURSOR = YYMARKER; + goto yy3; +yy8: + yych = *++YYCURSOR; + switch (yych) { + case 0xD0: goto yy12; + default: goto yy7; + } +yy9: + yych = *++YYCURSOR; + switch (yych) { + case 0xD0: goto yy13; + default: goto yy7; + } +yy10: + yych = *++YYCURSOR; + switch (yych) { + case 0xD0: goto yy14; + default: goto yy7; + } +yy11: + yych = *++YYCURSOR; + switch (yych) { + case 0xBD: goto yy15; + default: goto yy7; + } +yy12: + yych = *++YYCURSOR; + switch (yych) { + case 0xB0: goto yy16; + default: goto yy7; + } +yy13: + yych = *++YYCURSOR; + switch (yych) { + case 0xB5: goto yy17; + default: goto yy7; + } +yy14: + yych = *++YYCURSOR; + switch (yych) { + case 0xBB: goto yy18; + default: goto yy7; + } +yy15: + yych = *++YYCURSOR; + switch (yych) { + case 0xD1: goto yy19; + default: goto yy7; + } +yy16: + yych = *++YYCURSOR; + switch (yych) { + case 0xD1: goto yy20; + default: goto yy7; + } +yy17: + yych = *++YYCURSOR; + switch (yych) { + case 0xD1: goto yy21; + default: goto yy7; + } +yy18: + yych = *++YYCURSOR; + switch (yych) { + case 0xD1: goto yy22; + default: goto yy7; + } +yy19: + yych = *++YYCURSOR; + switch (yych) { + case 0x8F: goto yy23; + default: goto yy7; + } +yy20: + yych = *++YYCURSOR; + switch (yych) { + case 0x88: goto yy24; + default: goto yy7; + } +yy21: + yych = *++YYCURSOR; + switch (yych) { + case 0x80: goto yy25; + default: goto yy7; + } +yy22: + yych = *++YYCURSOR; + switch (yych) { + case 0x8F: goto yy26; + default: goto yy7; + } +yy23: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy27; + goto yy7; +yy24: + yych = *++YYCURSOR; + switch (yych) { + case 0xD0: goto yy29; + default: goto yy7; + } +yy25: + yych = *++YYCURSOR; + switch (yych) { + case 0xD0: goto yy30; + default: goto yy7; + } +yy26: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy31; + goto yy7; +yy27: + ++YYCURSOR; + { return 3; } +yy29: + yych = *++YYCURSOR; + switch (yych) { + case 0xB0: goto yy33; + default: goto yy7; + } +yy30: + yych = *++YYCURSOR; + switch (yych) { + case 0xB3: goto yy34; + default: goto yy7; + } +yy31: + ++YYCURSOR; + { return 2; } +yy33: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy35; + goto yy7; +yy34: + yych = *++YYCURSOR; + switch (yych) { + case 0xD0: goto yy37; + default: goto yy7; + } +yy35: + ++YYCURSOR; + { return 1; } +yy37: + yych = *++YYCURSOR; + switch (yych) { + case 0xB5: goto yy38; + default: goto yy7; + } +yy38: + yych = *++YYCURSOR; + switch (yych) { + case 0xD0: goto yy39; + case 0xD1: goto yy40; + default: goto yy7; + } +yy39: + yych = *++YYCURSOR; + switch (yych) { + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: goto yy41; + default: goto yy7; + } +yy40: + yych = *++YYCURSOR; + switch (yych) { + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: goto yy41; + default: goto yy7; + } +yy41: + yych = *++YYCURSOR; + if (yych >= 0x01) goto yy7; + ++YYCURSOR; + { return 0; } +} + +} + +int main() +{ + assert(lex("Аня") == 3); + assert(lex("Маша") == 1); + assert(lex("Уля") == 2); + assert(lex("Сергей") == 0); + assert(lex("Сергеы") == 0); + assert(lex("сергеЫ") == 0); + return 0; +} diff --git a/test/encodings/utf8_literals.i8--input-encoding(utf8).re b/test/encodings/utf8_literals.i8--input-encoding(utf8).re new file mode 100644 index 00000000..d003ac82 --- /dev/null +++ b/test/encodings/utf8_literals.i8--input-encoding(utf8).re @@ -0,0 +1,32 @@ +#include + +int lex(const char *YYCURSOR) +{ +#define YYCTYPE unsigned char + const char *YYMARKER; + + /*!re2c + re2c:yyfill:enable = 0; + + end = "\x00"; + + "Аня" end { return 3; } + "Маша" end { return 1; } + "Уля" end { return 2; } + + [Сс] "ерге" [а-яА-Я] end { return 0; } + + * { return -1; } + */ +} + +int main() +{ + assert(lex("Аня") == 3); + assert(lex("Маша") == 1); + assert(lex("Уля") == 2); + assert(lex("Сергей") == 0); + assert(lex("Сергеы") == 0); + assert(lex("сергеЫ") == 0); + return 0; +} -- 2.40.0