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")); } /**