javaparser icon indicating copy to clipboard operation
javaparser copied to clipboard

\s escape gives lexical error but should be valid in Java 16/17

Open FeldrinH opened this issue 2 years ago • 2 comments

This code fails to parse in javaparser but is considered valid in Java 16 and 17: https://www.jdoodle.com/ia/qrZ.

The escape \s in a string literal is replaced by a space when compiling code using javac, but gives Lexical error at line 3, column 33. Encountered: "s" (115), after : "\"Hello\\" when parsed with javaparser.

I could not find any documentation about it but it appears that \s became a valid escape sequence somewhere after Java 11 and before or with Java 16.

FeldrinH avatar May 04 '22 09:05 FeldrinH

that actually looks right https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-EscapeSequence

jlerbsc avatar May 04 '22 13:05 jlerbsc

I think that change happened with the last update to text blocks, so that you can have trailing spaces in a text block. Maybe it was forgotten, or it was only implemented for text blocks.

matozoid avatar May 04 '22 16:05 matozoid

I find same issue when I run parser with JDK15.

error logs:

Lexical error at line 268, column 50.  Encountered: "s" (115), after : "\"^\\\\s+vf\\\\s+(?<vf>\\\\d+)\\"
Problem stacktrace :
  com.github.javaparser.GeneratedJavaParserTokenManager.getNextToken(GeneratedJavaParserTokenManager.java:3054)
  com.github.javaparser.GeneratedJavaParser.jj_scan_token(GeneratedJavaParser.java:13563)
  com.github.javaparser.GeneratedJavaParser.jj_3R_203(GeneratedJavaParser.java:9138)
  com.github.javaparser.GeneratedJavaParser.jj_3R_139(GeneratedJavaParser.java:9029)
  com.github.javaparser.GeneratedJavaParser.jj_3R_89(GeneratedJavaParser.java:13394)
  com.github.javaparser.GeneratedJavaParser.jj_3R_188(GeneratedJavaParser.java:13153)
  com.github.javaparser.GeneratedJavaParser.jj_3R_125(GeneratedJavaParser.java:13135)
  com.github.javaparser.GeneratedJavaParser.jj_3R_122(GeneratedJavaParser.java:9977)
  com.github.javaparser.GeneratedJavaParser.jj_3_54(GeneratedJavaParser.java:9957)
  com.github.javaparser.GeneratedJavaParser.jj_2_54(GeneratedJavaParser.java:8872)
  com.github.javaparser.GeneratedJavaParser.BlockStatement(GeneratedJavaParser.java:5695)
  com.github.javaparser.GeneratedJavaParser.Statements(GeneratedJavaParser.java:2667)
  com.github.javaparser.GeneratedJavaParser.Block(GeneratedJavaParser.java:5636)
  com.github.javaparser.GeneratedJavaParser.MethodDeclaration(GeneratedJavaParser.java:2068)
  com.github.javaparser.GeneratedJavaParser.ClassOrInterfaceBodyDeclaration(GeneratedJavaParser.java:1669)
  com.github.javaparser.GeneratedJavaParser.ClassOrInterfaceBody(GeneratedJavaParser.java:1183)
  com.github.javaparser.GeneratedJavaParser.ClassOrInterfaceDeclaration(GeneratedJavaParser.java:500)
  com.github.javaparser.GeneratedJavaParser.CompilationUnit(GeneratedJavaParser.java:152)
  com.github.javaparser.JavaParser.parse(JavaParser.java:123)
  com.github.javaparser.JavaParser.parse(JavaParser.java:306)
  net.revelc.code.impsort.ImpSort.parseFile(ImpSort.java:132)

evoToBetter avatar Oct 18 '22 03:10 evoToBetter