From 95673a0bfc6067ed860de0b385eb23820f46e8ca Mon Sep 17 00:00:00 2001 From: Maikel Steneker Date: Mon, 13 May 2019 14:31:33 +0200 Subject: [PATCH] Added support for character prefixes + various other improvements. --- pmd-cpp/etc/grammar/cpp.jj | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/pmd-cpp/etc/grammar/cpp.jj b/pmd-cpp/etc/grammar/cpp.jj index c8344a270b..7a691dbc30 100644 --- a/pmd-cpp/etc/grammar/cpp.jj +++ b/pmd-cpp/etc/grammar/cpp.jj @@ -96,7 +96,7 @@ public final class CppParser { if (t.kind != ID && t.kind != SCOPE) return null; - StringBuffer s = new StringBuffer(); + StringBuilder s = new StringBuilder(); int i; if (t.kind != SCOPE) @@ -309,10 +309,11 @@ TOKEN [IGNORE_CASE] : TOKEN : { + < #CHRPREF : > +| < CHARACTER : + "'" ( ( ~["'","\\","\r","\n"] ) | ( "\\" ( ~["\n","\r"] ) ) )* "'" > - < CHARACTER : ("L")? "'" ( ( ~["'","\\","\r","\n"] ) | ( "\\" ( ~["\n","\r"] ) ) )* "'" > - -| < #STRPREF : (["L", "u", "U"] | "u8")? > +| < #STRPREF : ("L" | "u" | "U" | "u8")? > | < STRING : "\"" ( ( ~["\"","\\","\r","\n"] ) | ( "\\" ( ~["\n","\r"] | "\n" | "\r\n" ) ) )* "\"" > @@ -324,7 +325,7 @@ TOKEN : { < RSTRING : "R\"" > { - StringBuffer sb = new StringBuffer(16); + StringBuilder sb = new StringBuilder(16); // delim ------+ // vvv @@ -338,14 +339,12 @@ TOKEN : } final String delim = sb.toString(); - sb = new StringBuffer(256); rstringbody: // Matching R"...(...)..." // ^ for (;;) { try { curChar = input_stream.readChar(); } catch(java.io.IOException e) { return; } - sb.append(curChar); if (curChar == ')') { // delim --------------+ // vvv @@ -358,7 +357,6 @@ rstringbody: input_stream.backup(1); continue rstringbody; } - sb.append(curChar); } // Matching R"...(...)..." // ^ @@ -368,12 +366,13 @@ rstringbody: input_stream.backup(1); continue rstringbody; } - sb.append(curChar); break; } } // Setting final token image - matchedToken.image += delim + "(" + sb.toString(); + matchedToken.image = input_stream.GetImage(); + matchedToken.endLine = input_stream.getEndLine(); + matchedToken.endColumn = input_stream.getEndColumn(); } }