From 3461d0f5d1d020865d0e68ece92ea58ef83a6bf9 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 8 Apr 2021 17:45:33 -0700 Subject: parser: fix poor diagnosis of \x invalid escape. * parser.l (grammar): Because the \x pattern requires one or more digits after it, if they are not present, we simply report \x as an an unrecognized escape. It's better if we diagnose it properly as a \x that is not followed by digits. --- parser.l | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/parser.l b/parser.l index e310d1f7..778c632a 100644 --- a/parser.l +++ b/parser.l @@ -836,6 +836,10 @@ UONLY {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U} return TEXT; } +[\\]x { + yyerrorf(yyg, lit("\\x escape without digits"), nao); +} + [\\]. { yyerrorf(yyg, lit("unrecognized escape \\~a"), chr(yytext[1]), nao); } @@ -919,7 +923,10 @@ UONLY {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U} return REGCHAR; } - yyerrprepf(yyg, lit("unrecognized escape in regex"), nao); + if (yytext[1] == 'x') + yyerrprepf(yyg, lit("\\x escape without digits in regex"), nao); + else + yyerrprepf(yyg, lit("unrecognized escape in regex"), nao); return ERRTOK; } @@ -1021,6 +1028,10 @@ UONLY {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U} return LITCHAR; } +[\\]x { + yyerrorf(yyg, lit("\\x escape without digits"), nao); +} + [\\]. { yyerrorf(yyg, lit("unrecognized escape: \\~a"), chr(yytext[1]), nao); } -- cgit v1.2.3