static struct error_handling eh = { tokv_word_errorstostderr, 0,0,0,0,0 };
static int dequote(char *inplace);
+static void countnewlines(void);
#define YY_NO_UNPUT
char *ep;
lr_min= (int)strtoul(yytext,&ep,10);
assert(*ep == HYPHEN);
- assert(*++ep);
+ ep++; assert(*ep);
lr_max= (int)strtoul(ep,&ep,10);
assert(!*ep);
- if (lr_max < lr_min) {
- parseerrprint("fd range has min > max");
- return tokv_error;
- }
+ if (lr_max < lr_min)
+ return parseerrprint("fd range has min > max");
return tokv_fdrange;
}
[0-9]{1,8}- {
char *ep;
lr_min= (int)strtoul(yytext,&ep,10);
assert(*ep == HYPHEN);
- assert(!*++ep);
+ ep++; assert(!*ep);
lr_max=-1;
return tokv_fdstoend;
}
-([\ \t]*\\[\ \t]*\n[\ \t]*)+ return tokv_lwsp;
+([\ \t]*\\[\ \t]*\n[\ \t]*)+ countnewlines(); return tokv_lwsp;
[\ \t]+ return tokv_lwsp;
[\ \t]*\n cstate->lineno++; return tokv_newline;
[\ \t]*\#[^\n]*\n cstate->lineno++; return tokv_newline;
-[\ \t]*\#[^\n]* {
- parseerrprint("missing newline at eof after comment");
- return tokv_error;
- }
+[\ \t]*\#[^\n]* return parseerrprint("missing newline at eof after comment");
\"([^\\\"\n]|\\[a-z]|\\[0-9]{3}|\\x[0-9A-Fa-f]{2}|\\[[:punct:]]|\\[ \t]*\n)*\" {
+ countnewlines();
return dequote(yytext);
}
-\".* {
- parseerrprint("misquoted or unterminated string");
- return tokv_error;
- }
-[^\ \t\n\\]+ return tokv_barestring;
-<<EOF>> return tokv_eof;
+[^\ \t\n\\\"]+ return tokv_barestring;
+<<EOF>> return tokv_eof;
+\" return parseerrprint("misquoted or unterminated string");
+\\ return parseerrprint("unexpected backslash");
+. abort(); /* expect lex warning "rule cannot be matched" */
*}
changequote(`,')
%%