diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-04-08 17:45:33 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-04-08 17:45:33 -0700 |
commit | fb07c84eeaeda96eac369ff763dd9c1c5b5ee0fb (patch) | |
tree | 7ad5d07054a5cc79fc418b2b6c7e3f2aa6a125ba | |
parent | e0e3115ae78c2c6f59bb279b69fbf6f1f32c0be5 (diff) | |
download | txr-fb07c84eeaeda96eac369ff763dd9c1c5b5ee0fb.tar.gz txr-fb07c84eeaeda96eac369ff763dd9c1c5b5ee0fb.tar.bz2 txr-fb07c84eeaeda96eac369ff763dd9c1c5b5ee0fb.zip |
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.
-rw-r--r-- | parser.l | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -836,6 +836,10 @@ UONLY {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U} return TEXT; } +<SPECIAL>[\\]x { + yyerrorf(yyg, lit("\\x escape without digits"), nao); +} + <SPECIAL>[\\]. { 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; } +<STRLIT,QSILIT,WLIT,QWLIT>[\\]x { + yyerrorf(yyg, lit("\\x escape without digits"), nao); +} + <STRLIT,QSILIT,WLIT,QWLIT>[\\]. { yyerrorf(yyg, lit("unrecognized escape: \\~a"), chr(yytext[1]), nao); } |