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