From 4e92d34ebb74197efa1ccd4e01f11bc068d59c23 Mon Sep 17 00:00:00 2001 From: Mick Jordan <mick.jordan@oracle.com> Date: Fri, 5 Jun 2015 11:25:07 -0700 Subject: [PATCH] parse escapes in `xxx` correctly --- .../oracle/truffle/r/parser/ParserGeneration.java | 3 ++- .../src/com/oracle/truffle/r/parser/R.g | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java index 6f197afa30..dac5c3b498 100644 --- a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java +++ b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java @@ -65,6 +65,7 @@ public class ParserGeneration { "simplified unary and binary operations", "allow unary ! in normal expressions", "added \\a, \\v and \\` escape sequences", - "added octal escape sequences for strings" + "added octal escape sequences for strings", + "handles escapes in `xxx` form" }; } diff --git a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g index 46c15c62cc..ac99ac39ab 100644 --- a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g +++ b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g @@ -687,11 +687,23 @@ DD : '..' ('0'..'9')+ ; ID : '.'* ID_NAME | '.' - | '`' ( ESC_SEQ | ~('\\'|'`') )* '`' { setText(getText().substring(1, getText().length()-1)); } + | '`' BACKTICK_NAME ; OP : '%' OP_NAME+ '%' ; +fragment BACKTICK_NAME + @init { final StringBuilder buf = new StringBuilder(); } + : ( + ( + ESCAPE[buf] + | i = ~( '\\' | '`' ) { buf.appendCodePoint(i); } + )* + '`' + { setText(buf.toString()); } + ) + ; + STRING @init { final StringBuilder buf = new StringBuilder(); } : ( -- GitLab