+#line 453 "src/parser.re"
+
+
+ character: ;
+
+#line 10337 "src/parser.c"
+ {
+ unsigned char yych;
+ if (lim <= cur) if (cur >= lim) goto done;;
+ yych = *cur;
+ switch (yych) {
+ case '\n':
+ case '\r': goto yy602;
+ case '\'': goto yy604;
+ case '\\': goto yy606;
+ default: goto yy600;
+ }
+yy600:
+ ++cur;
+#line 461 "src/parser.re"
+ { goto character; }
+#line 10353 "src/parser.c"
+yy602:
+ ++cur;
+#line 459 "src/parser.re"
+ { NEWLINE(); goto character; }
+#line 10358 "src/parser.c"
+yy604:
+ ++cur;
+#line 458 "src/parser.re"
+ { if (escaped) goto character; cur -= 1; NEWTOKEN(PSI_T_QUOTED_CHAR); cur += 1; token->flags = char_width; goto start; }
+#line 10363 "src/parser.c"
+yy606:
+ ++cur;
+#line 460 "src/parser.re"
+ { escaped = !escaped; }
+#line 10368 "src/parser.c"
+ }
+#line 463 "src/parser.re"
+
+ string: ;
+
+#line 10374 "src/parser.c"
+ {
+ unsigned char yych;
+ if (lim <= cur) if (cur >= lim) goto done;;
+ yych = *cur;
+ switch (yych) {
+ case '\n':
+ case '\r': goto yy612;
+ case '"': goto yy614;
+ case '\\': goto yy616;
+ default: goto yy610;
+ }
+yy610:
+ ++cur;
+#line 470 "src/parser.re"
+ { goto string; }
+#line 10390 "src/parser.c"
+yy612:
+ ++cur;
+#line 468 "src/parser.re"
+ { NEWLINE(); goto string; }
+#line 10395 "src/parser.c"
+yy614:
+ ++cur;
+#line 467 "src/parser.re"
+ { if (escaped) goto string; cur -= 1; NEWTOKEN(PSI_T_QUOTED_STRING); cur += 1; token->flags = char_width; goto start; }
+#line 10400 "src/parser.c"
+yy616:
+ ++cur;
+#line 469 "src/parser.re"
+ { escaped = !escaped; goto string; }
+#line 10405 "src/parser.c"
+ }
+#line 472 "src/parser.re"