From fb07c84eeaeda96eac369ff763dd9c1c5b5ee0fb 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