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 bf6d0dd  JEXL-296: fix grammar, add test Task #JEXL-296 - Real literal 
in scientific format is not parsed without suffix
bf6d0dd is described below

commit bf6d0dd4c11221c13df11a364339765586fac18e
Author: henrib <hen...@apache.org>
AuthorDate: Mon Apr 1 16:03:38 2019 +0200

    JEXL-296: fix grammar, add test
    Task #JEXL-296 - Real literal in scientific format is not parsed without 
suffix
---
 RELEASE-NOTES.txt                                  |  1 +
 .../org/apache/commons/jexl3/parser/Parser.jjt     | 31 +++++++++++++---------
 src/site/xdoc/changes.xml                          |  3 +++
 .../org/apache/commons/jexl3/ArithmeticTest.java   |  5 +++-
 4 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index e99a179..a4d6744 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -70,6 +70,7 @@ New Features in 3.2:
 Bugs Fixed in 3.2:
 ==================
 
+* JEXL-296:      Real literal in scientific format is not parsed without suffix
 * JEXL-291:      Using sandbox prevents array-syntax lookup by number in Map
 * JEXL-290:      Safe navigation fails on chained method calls
 * JEXL-289:      Passing undeclared function parameter can overwrite a local 
function variable
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 0451b72..04681f1 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
+++ b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
@@ -232,18 +232,25 @@ TOKEN_MGR_DECLS : {
 
 <DEFAULT, REGISTERS> TOKEN : /* LITERALS */
 {
-  < INTEGER_LITERAL:
-      ( "0" (["0"-"7"])* | ["1"-"9"] (["0"-"9"])* | "0" ["x","X"] 
(["0"-"9","a"-"f","A"-"F"])+ )
-      (["l","L","h","H"])?
-  >
- |
-  < FLOAT_LITERAL:
-    "#NaN"
-    |
-    (<DIGIT>)+ "." (<DIGIT>)+ ((["e","E"])(["+","-"])?(<DIGIT>)+)? 
(["d","D","f","F","b","B"])?
-    |
-    (<DIGIT>)+ (".")? ((["e","E"])(["+","-"])?(<DIGIT>)+)? 
["d","D","f","F","b","B"]
-  >
+ <INTEGER_LITERAL:
+      <DECIMAL_LITERAL> (<INT_SFX>)? 
+    | <HEX_LITERAL> (<INT_SFX>)?
+    | <OCTAL_LITERAL> (<INT_SFX>)?
+ >
+    | <#DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])*>
+    | <#HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+>
+    | <#OCTAL_LITERAL: "0" (["0"-"7"])*>
+    | <#INT_SFX : ["l","L","h","H"]>
+| 
+<FLOAT_LITERAL:
+      (["0"-"9"])+ "." (["0"-"9"])+ (<FLT_SFX>)?
+    | (["0"-"9"])+ (".")? (<FLT_SFX>)
+    | "." (["0"-"9"])+ (<FLT_SFX>)
+    | "#NaN"
+>
+    |  <#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+>
+    |  <#FLT_CLS : ["f","F","d","D","b","B"]>
+    |  <#FLT_SFX : <EXPONENT> (<FLT_CLS>)? | <FLT_CLS> >
 }
 
 <*> TOKEN :
diff --git a/src/site/xdoc/changes.xml b/src/site/xdoc/changes.xml
index 8182d25..08691be 100644
--- a/src/site/xdoc/changes.xml
+++ b/src/site/xdoc/changes.xml
@@ -26,6 +26,9 @@
     </properties>
     <body>
         <release version="3.2" date="unreleased">
+            <action dev="henrib" type="fix" issue="JEXL-296" due-to="Dmitri 
Blinov">
+                Real literal in scientific format is not parsed without suffix
+            </action>
             <action dev="henrib" type="add" issue="JEXL-295"> 
                 Add unary plus operator
             </action>
diff --git a/src/test/java/org/apache/commons/jexl3/ArithmeticTest.java 
b/src/test/java/org/apache/commons/jexl3/ArithmeticTest.java
index ce9ccae..811073d 100644
--- a/src/test/java/org/apache/commons/jexl3/ArithmeticTest.java
+++ b/src/test/java/org/apache/commons/jexl3/ArithmeticTest.java
@@ -341,13 +341,16 @@ public class ArithmeticTest extends JexlTestCase {
     public void test2DoubleLiterals() throws Exception {
         JexlEvalContext ctxt = new JexlEvalContext();
         ctxt.setStrictArithmetic(true);
-        String stmt = "{a = 42.0e1D; b = 42.0E+2D; c = 42.0e-1d; d = 
42.0E-2d;}";
+        String stmt = "{a = 42.0e1D; b = 42.0E+2D; c = 42.0e-1d; d = 42.0E-2d; 
e=10e10; f= +1.e1; g=1e1; }";
         JexlScript expr = JEXL.createScript(stmt);
         /* Object value = */ expr.execute(ctxt);
         Assert.assertEquals(Double.valueOf("42.0e+1"), ctxt.get("a"));
         Assert.assertEquals(Double.valueOf("42.0e+2"), ctxt.get("b"));
         Assert.assertEquals(Double.valueOf("42.0e-1"), ctxt.get("c"));
         Assert.assertEquals(Double.valueOf("42.0e-2"), ctxt.get("d"));
+        Assert.assertEquals(Double.valueOf("10e10"), ctxt.get("e"));
+        Assert.assertEquals(Double.valueOf("10"), ctxt.get("f"));
+        Assert.assertEquals(Double.valueOf("10"), ctxt.get("g"));
     }
 
     /**

Reply via email to