This is an automated email from the ASF dual-hosted git repository.

henrib pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jexl.git


The following commit(s) were added to refs/heads/master by this push:
     new 74dcd97  More parser compatibility fixes for JavaCC/JJTree
     new 3265f5d  Merge pull request #57 from csamak/master
74dcd97 is described below

commit 74dcd97613a047a7ff031cf7537f6878447fe761
Author: Cameron Samak <csa...@apache.org>
AuthorDate: Fri Jun 4 17:20:20 2021 +0000

    More parser compatibility fixes for JavaCC/JJTree
    
    I'm not sure why STATIC=false was commented out? Without it, generating
    the parser with JavaCC does not work.
    
    The Parser constructor taking String throws ParseException (a checked
    exception) when generated with JavaCC. I'm not sure why, but the
    StringProvider exception does not.
    
    For the pragmaValue changes, unreachable statements were generated. See
    http://consoliii.blogspot.com/2014/05/javacc-modern-mode-how-to-resolve.html
    
    With these changes I'm able to use JavaCC and everything passes again.
---
 .../org/apache/commons/jexl3/internal/Engine.java  |  5 +++--
 .../org/apache/commons/jexl3/parser/Parser.jjt     | 24 ++++++++++++++--------
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/src/main/java/org/apache/commons/jexl3/internal/Engine.java 
b/src/main/java/org/apache/commons/jexl3/internal/Engine.java
index 2aeed16..6b78ad4 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Engine.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Engine.java
@@ -40,6 +40,7 @@ import org.apache.commons.jexl3.parser.ASTNumberLiteral;
 import org.apache.commons.jexl3.parser.ASTStringLiteral;
 import org.apache.commons.jexl3.parser.JexlNode;
 import org.apache.commons.jexl3.parser.Parser;
+import org.apache.commons.jexl3.parser.StringProvider;
 
 
 import org.apache.commons.logging.Log;
@@ -148,7 +149,7 @@ public class Engine extends JexlEngine {
      * The {@link Parser}; when parsing expressions, this engine uses the 
parser if it
      * is not already in use otherwise it will create a new temporary one.
      */
-    protected final Parser parser = new Parser(";"); //$NON-NLS-1$
+    protected final Parser parser = new Parser(new StringProvider(";")); 
//$NON-NLS-1$
     /**
      * The expression max length to hit the cache.
      */
@@ -872,7 +873,7 @@ public class Engine extends JexlEngine {
             }
         } else {
             // ...otherwise parser was in use, create a new temporary one
-            final Parser lparser = new Parser(";");
+            final Parser lparser = new Parser(new StringProvider(";"));
             script = lparser.parse(ninfo, features, src, scope);
         }
         if (source != null) {
diff --git a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt 
b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
index 8621fba..3014472 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
+++ b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
@@ -19,7 +19,7 @@
 options
 {
    MULTI=true;
-   //STATIC=false;
+   STATIC=false;
    JAVA_TEMPLATE_TYPE="modern";
    VISITOR=true;
    NODE_SCOPE_HOOK=true;
@@ -454,16 +454,22 @@ Object pragmaValue() #void :
 {
 Token v;
 LinkedList<String> lstr = new LinkedList<String>();
+Object result;
 }
 {
-      LOOKAHEAD(1) v=<INTEGER_LITERAL> { return 
NumberParser.parseInteger(v.image); }
-    | LOOKAHEAD(1) v=<FLOAT_LITERAL> { return 
NumberParser.parseDouble(v.image); }
-    | LOOKAHEAD(1) v=<STRING_LITERAL> { return Parser.buildString(v.image, 
true); }
-    | LOOKAHEAD(1)  pragmaKey(lstr) { return stringify(lstr); }
-    | LOOKAHEAD(1) <TRUE> { return true; }
-    | LOOKAHEAD(1) <FALSE> { return false; }
-    | LOOKAHEAD(1) <NULL> { return null; }
-    | LOOKAHEAD(1) <NAN_LITERAL> { return Double.NaN; }
+  (
+      LOOKAHEAD(1) v=<INTEGER_LITERAL> { result = 
NumberParser.parseInteger(v.image); }
+    | LOOKAHEAD(1) v=<FLOAT_LITERAL> { result = 
NumberParser.parseDouble(v.image); }
+    | LOOKAHEAD(1) v=<STRING_LITERAL> { result = Parser.buildString(v.image, 
true); }
+    | LOOKAHEAD(1)  pragmaKey(lstr) { result = stringify(lstr); }
+    | LOOKAHEAD(1) <TRUE> { result = true; }
+    | LOOKAHEAD(1) <FALSE> { result = false; }
+    | LOOKAHEAD(1) <NULL> { result = null; }
+    | LOOKAHEAD(1) <NAN_LITERAL> { result = Double.NaN; }
+  )
+  {
+    return result;
+  }
 }
 
 

Reply via email to