From a8fa1ae9f6a204486883de28c89b839f4f38f750 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Wed, 18 Jun 2008 13:35:28 +0000 Subject: [PATCH] Catching of invalid (too big) ints at parse time. git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@797 bbc10eb1-c90d-0410-af57-cb519fbb1720 --- prism/src/parser/PrismParser.java | 626 +++++++++++++++--------------- prism/src/parser/PrismParser.jj | 22 +- 2 files changed, 339 insertions(+), 309 deletions(-) diff --git a/prism/src/parser/PrismParser.java b/prism/src/parser/PrismParser.java index b5f1b77e..416513b2 100644 --- a/prism/src/parser/PrismParser.java +++ b/prism/src/parser/PrismParser.java @@ -2137,15 +2137,29 @@ public class PrismParser implements PrismParserConstants { // Expression: literal static final public Expression ExpressionLiteral(boolean prop, boolean pathprop) throws ParseException { - Expression ret; + Expression ret = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case REG_INT: jj_consume_token(REG_INT); - ret = new ExpressionLiteral(Expression.INT, new Integer(getToken(0).image)); + try { + int i = Integer.parseInt(getToken(0).image); + ret = new ExpressionLiteral(Expression.INT, new Integer(i)); + } catch (NumberFormatException e) { + // Need to catch this because some matches for regexp REG_INT + // are not valid integers (e.g. too big). + {if (true) throw generateParseException();} + } break; case REG_DOUBLE: jj_consume_token(REG_DOUBLE); - ret = new ExpressionLiteral(Expression.DOUBLE, new Double(getToken(0).image), getToken(0).image); + try { + double d = Double.parseDouble(getToken(0).image); + ret = new ExpressionLiteral(Expression.DOUBLE, new Double(d), getToken(0).image); + } catch (NumberFormatException e) { + // Need to catch this because some matches for regexp REG_DOUBLE + // may not be valid doubles. + {if (true) throw generateParseException();} + } break; case TRUE: jj_consume_token(TRUE); @@ -2747,6 +2761,18 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_108() { + if (jj_scan_token(DQUOTE)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_132()) { + jj_scanpos = xsp; + if (jj_3R_133()) return true; + } + if (jj_scan_token(DQUOTE)) return true; + return false; + } + static final private boolean jj_3_7() { if (jj_scan_token(OR)) return true; if (jj_scan_token(OR)) return true; @@ -2754,11 +2780,6 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_27() { - if (jj_scan_token(REG_IDENT)) return true; - return false; - } - static final private boolean jj_3R_31() { if (jj_scan_token(LPARENTH)) return true; if (jj_3R_33()) return true; @@ -2768,6 +2789,11 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_110() { + if (jj_scan_token(REG_DOUBLE)) return true; + return false; + } + static final private boolean jj_3R_66() { if (jj_3R_67()) return true; return false; @@ -2779,28 +2805,18 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_131() { - if (jj_3R_139()) return true; - return false; - } - - static final private boolean jj_3R_112() { - if (jj_scan_token(FALSE)) return true; - return false; - } - static final private boolean jj_3R_117() { if (jj_scan_token(MIN)) return true; return false; } - static final private boolean jj_3R_111() { - if (jj_scan_token(TRUE)) return true; + static final private boolean jj_3_11() { + if (jj_scan_token(DQUOTE)) return true; return false; } - static final private boolean jj_3R_110() { - if (jj_scan_token(REG_DOUBLE)) return true; + static final private boolean jj_3R_148() { + if (jj_scan_token(S)) return true; return false; } @@ -2819,6 +2835,12 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_147() { + if (jj_scan_token(F)) return true; + if (jj_3R_34()) return true; + return false; + } + static final private boolean jj_3R_100() { Token xsp; xsp = jj_scanpos; @@ -2840,6 +2862,13 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_146() { + if (jj_scan_token(I)) return true; + if (jj_scan_token(EQ)) return true; + if (jj_3R_34()) return true; + return false; + } + static final private boolean jj_3R_63() { Token xsp; xsp = jj_scanpos; @@ -2850,6 +2879,13 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_145() { + if (jj_scan_token(C)) return true; + if (jj_scan_token(LE)) return true; + if (jj_3R_34()) return true; + return false; + } + static final private boolean jj_3R_28() { Token xsp; xsp = jj_scanpos; @@ -2865,15 +2901,26 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_108() { + static final private boolean jj_3R_153() { if (jj_scan_token(DQUOTE)) return true; + if (jj_3R_27()) return true; + if (jj_scan_token(DQUOTE)) return true; + return false; + } + + static final private boolean jj_3R_130() { Token xsp; xsp = jj_scanpos; - if (jj_3R_132()) { + if (jj_3R_145()) { jj_scanpos = xsp; - if (jj_3R_133()) return true; + if (jj_3R_146()) { + jj_scanpos = xsp; + if (jj_3R_147()) { + jj_scanpos = xsp; + if (jj_3R_148()) return true; + } + } } - if (jj_scan_token(DQUOTE)) return true; return false; } @@ -2893,11 +2940,6 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3_11() { - if (jj_scan_token(DQUOTE)) return true; - return false; - } - static final private boolean jj_3R_64() { if (jj_scan_token(AND)) return true; if (jj_3R_63()) return true; @@ -2914,51 +2956,15 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_148() { - if (jj_scan_token(S)) return true; - return false; - } - - static final private boolean jj_3R_147() { - if (jj_scan_token(F)) return true; - if (jj_3R_34()) return true; - return false; - } - - static final private boolean jj_3R_146() { - if (jj_scan_token(I)) return true; - if (jj_scan_token(EQ)) return true; - if (jj_3R_34()) return true; - return false; - } - - static final private boolean jj_3R_145() { - if (jj_scan_token(C)) return true; - if (jj_scan_token(LE)) return true; - if (jj_3R_34()) return true; - return false; - } - - static final private boolean jj_3R_153() { - if (jj_scan_token(DQUOTE)) return true; - if (jj_3R_27()) return true; - if (jj_scan_token(DQUOTE)) return true; - return false; - } - - static final private boolean jj_3R_130() { + static final private boolean jj_3R_150() { + if (jj_scan_token(LBRACE)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_145()) { - jj_scanpos = xsp; - if (jj_3R_146()) { - jj_scanpos = xsp; - if (jj_3R_147()) { + if (jj_3R_153()) { jj_scanpos = xsp; - if (jj_3R_148()) return true; - } - } + if (jj_3R_154()) return true; } + if (jj_scan_token(RBRACE)) return true; return false; } @@ -3002,15 +3008,13 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_150() { - if (jj_scan_token(LBRACE)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_153()) { - jj_scanpos = xsp; - if (jj_3R_154()) return true; - } - if (jj_scan_token(RBRACE)) return true; + static final private boolean jj_3R_126() { + if (jj_3R_139()) return true; + return false; + } + + static final private boolean jj_3R_140() { + if (jj_3R_150()) return true; return false; } @@ -3038,61 +3042,6 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_50() { - if (jj_3R_55()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_56()) { jj_scanpos = xsp; break; } - } - return false; - } - - static final private boolean jj_3R_126() { - if (jj_3R_139()) return true; - return false; - } - - static final private boolean jj_3R_140() { - if (jj_3R_150()) return true; - return false; - } - - static final private boolean jj_3R_51() { - if (jj_scan_token(QMARK)) return true; - if (jj_3R_50()) return true; - if (jj_scan_token(COLON)) return true; - if (jj_3R_48()) return true; - return false; - } - - static final private boolean jj_3R_113() { - if (jj_scan_token(LPARENTH)) return true; - if (jj_3R_116()) return true; - if (jj_scan_token(RPARENTH)) return true; - return false; - } - - static final private boolean jj_3_10() { - if (jj_3R_29()) return true; - if (jj_scan_token(LPARENTH)) return true; - return false; - } - - static final private boolean jj_3R_101() { - if (jj_3R_27()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_113()) jj_scanpos = xsp; - return false; - } - - static final private boolean jj_3_9() { - if (jj_3R_29()) return true; - if (jj_scan_token(LPARENTH)) return true; - return false; - } - static final private boolean jj_3R_144() { if (jj_scan_token(MAX)) return true; if (jj_scan_token(EQ)) return true; @@ -3127,11 +3076,13 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_48() { - if (jj_3R_50()) return true; + static final private boolean jj_3R_50() { + if (jj_3R_55()) return true; Token xsp; - xsp = jj_scanpos; - if (jj_3R_51()) jj_scanpos = xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_56()) { jj_scanpos = xsp; break; } + } return false; } @@ -3141,11 +3092,6 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_59() { - if (jj_3R_29()) return true; - return false; - } - static final private boolean jj_3R_127() { if (jj_scan_token(R)) return true; Token xsp; @@ -3165,15 +3111,18 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_57() { - if (jj_3R_29()) return true; + static final private boolean jj_3R_51() { + if (jj_scan_token(QMARK)) return true; + if (jj_3R_50()) return true; + if (jj_scan_token(COLON)) return true; + if (jj_3R_48()) return true; return false; } - static final private boolean jj_3_1() { - if (jj_scan_token(MODULE)) return true; - if (jj_3R_27()) return true; - if (jj_scan_token(EQ)) return true; + static final private boolean jj_3R_113() { + if (jj_scan_token(LPARENTH)) return true; + if (jj_3R_116()) return true; + if (jj_scan_token(RPARENTH)) return true; return false; } @@ -3195,23 +3144,68 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_99() { - if (jj_3R_108()) return true; + static final private boolean jj_3_10() { + if (jj_3R_29()) return true; + if (jj_scan_token(LPARENTH)) return true; return false; } - static final private boolean jj_3R_89() { - if (jj_scan_token(DIVIDE)) return true; + static final private boolean jj_3R_101() { + if (jj_3R_27()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_113()) jj_scanpos = xsp; return false; } - static final private boolean jj_3R_54() { - if (jj_scan_token(LBRACKET)) return true; - if (jj_3R_34()) return true; - if (jj_scan_token(COMMA)) return true; - if (jj_3R_34()) return true; - if (jj_scan_token(RBRACKET)) return true; - return false; + static final private boolean jj_3_9() { + if (jj_3R_29()) return true; + if (jj_scan_token(LPARENTH)) return true; + return false; + } + + static final private boolean jj_3R_48() { + if (jj_3R_50()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_51()) jj_scanpos = xsp; + return false; + } + + static final private boolean jj_3R_59() { + if (jj_3R_29()) return true; + return false; + } + + static final private boolean jj_3R_57() { + if (jj_3R_29()) return true; + return false; + } + + static final private boolean jj_3_1() { + if (jj_scan_token(MODULE)) return true; + if (jj_3R_27()) return true; + if (jj_scan_token(EQ)) return true; + return false; + } + + static final private boolean jj_3R_99() { + if (jj_3R_108()) return true; + return false; + } + + static final private boolean jj_3R_89() { + if (jj_scan_token(DIVIDE)) return true; + return false; + } + + static final private boolean jj_3R_54() { + if (jj_scan_token(LBRACKET)) return true; + if (jj_3R_34()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_34()) return true; + if (jj_scan_token(RBRACKET)) return true; + return false; } static final private boolean jj_3R_98() { @@ -3241,11 +3235,23 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_125() { + if (jj_scan_token(EQ)) return true; + if (jj_scan_token(QMARK)) return true; + return false; + } + static final private boolean jj_3R_97() { if (jj_3R_106()) return true; return false; } + static final private boolean jj_3R_124() { + if (jj_3R_75()) return true; + if (jj_3R_34()) return true; + return false; + } + static final private boolean jj_3R_49() { Token xsp; xsp = jj_scanpos; @@ -3309,6 +3315,27 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_123() { + if (jj_3R_139()) return true; + return false; + } + + static final private boolean jj_3R_106() { + if (jj_scan_token(S)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_124()) { + jj_scanpos = xsp; + if (jj_3R_125()) return true; + } + if (jj_scan_token(LBRACKET)) return true; + if (jj_3R_34()) return true; + xsp = jj_scanpos; + if (jj_3R_126()) jj_scanpos = xsp; + if (jj_scan_token(RBRACKET)) return true; + return false; + } + static final private boolean jj_3R_91() { if (jj_3R_100()) return true; return false; @@ -3330,20 +3357,18 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_125() { - if (jj_scan_token(EQ)) return true; - if (jj_scan_token(QMARK)) return true; + static final private boolean jj_3R_81() { + if (jj_scan_token(MINUS)) return true; return false; } - static final private boolean jj_3R_81() { - if (jj_scan_token(MINUS)) return true; + static final private boolean jj_3R_152() { + if (jj_scan_token(MAX)) return true; return false; } - static final private boolean jj_3R_124() { - if (jj_3R_75()) return true; - if (jj_3R_34()) return true; + static final private boolean jj_3R_151() { + if (jj_scan_token(MIN)) return true; return false; } @@ -3393,27 +3418,6 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_123() { - if (jj_3R_139()) return true; - return false; - } - - static final private boolean jj_3R_106() { - if (jj_scan_token(S)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_124()) { - jj_scanpos = xsp; - if (jj_3R_125()) return true; - } - if (jj_scan_token(LBRACKET)) return true; - if (jj_3R_34()) return true; - xsp = jj_scanpos; - if (jj_3R_126()) jj_scanpos = xsp; - if (jj_scan_token(RBRACKET)) return true; - return false; - } - static final private boolean jj_3R_86() { if (jj_scan_token(MINUS)) return true; if (jj_3R_78()) return true; @@ -3425,6 +3429,18 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_149() { + if (jj_scan_token(LBRACE)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_151()) { + jj_scanpos = xsp; + if (jj_3R_152()) return true; + } + if (jj_scan_token(RBRACE)) return true; + return false; + } + static final private boolean jj_3R_42() { if (jj_scan_token(R)) return true; return false; @@ -3440,8 +3456,15 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_152() { - if (jj_scan_token(MAX)) return true; + static final private boolean jj_3R_139() { + if (jj_scan_token(LBRACE)) return true; + if (jj_3R_34()) return true; + if (jj_scan_token(RBRACE)) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_149()) { jj_scanpos = xsp; break; } + } return false; } @@ -3461,11 +3484,6 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_151() { - if (jj_scan_token(MIN)) return true; - return false; - } - static final private boolean jj_3_3() { if (jj_scan_token(LABEL)) return true; return false; @@ -3481,92 +3499,40 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_85() { + if (jj_scan_token(LE)) return true; + return false; + } + static final private boolean jj_3R_88() { if (jj_scan_token(TIMES)) return true; return false; } + static final private boolean jj_3R_84() { + if (jj_scan_token(GE)) return true; + return false; + } + static final private boolean jj_3_2() { if (jj_scan_token(LABEL)) return true; if (jj_scan_token(DQUOTE)) return true; return false; } - static final private boolean jj_3R_79() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_88()) { - jj_scanpos = xsp; - if (jj_3R_89()) return true; - } - if (jj_3R_78()) return true; + static final private boolean jj_3R_83() { + if (jj_scan_token(LT)) return true; return false; } - static final private boolean jj_3R_149() { - if (jj_scan_token(LBRACE)) return true; + static final private boolean jj_3R_79() { Token xsp; xsp = jj_scanpos; - if (jj_3R_151()) { + if (jj_3R_88()) { jj_scanpos = xsp; - if (jj_3R_152()) return true; - } - if (jj_scan_token(RBRACE)) return true; - return false; - } - - static final private boolean jj_3R_35() { - if (jj_3R_36()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_37()) jj_scanpos = xsp; - return false; - } - - static final private boolean jj_3R_139() { - if (jj_scan_token(LBRACE)) return true; - if (jj_3R_34()) return true; - if (jj_scan_token(RBRACE)) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_149()) { jj_scanpos = xsp; break; } + if (jj_3R_89()) return true; } - return false; - } - - static final private boolean jj_3_5() { - if (jj_scan_token(DQUOTE)) return true; - return false; - } - - static final private boolean jj_3R_73() { if (jj_3R_78()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_79()) { jj_scanpos = xsp; break; } - } - return false; - } - - static final private boolean jj_3R_85() { - if (jj_scan_token(LE)) return true; - return false; - } - - static final private boolean jj_3R_84() { - if (jj_scan_token(GE)) return true; - return false; - } - - static final private boolean jj_3R_80() { - if (jj_scan_token(PLUS)) return true; - return false; - } - - static final private boolean jj_3R_83() { - if (jj_scan_token(LT)) return true; return false; } @@ -3591,23 +3557,20 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_74() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_80()) { - jj_scanpos = xsp; - if (jj_3R_81()) return true; - } - if (jj_3R_73()) return true; - return false; - } - static final private boolean jj_3R_135() { if (jj_3R_75()) return true; if (jj_3R_34()) return true; return false; } + static final private boolean jj_3R_35() { + if (jj_3R_36()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_37()) jj_scanpos = xsp; + return false; + } + static final private boolean jj_3R_138() { if (jj_scan_token(MAX)) return true; if (jj_scan_token(EQ)) return true; @@ -3622,15 +3585,14 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_136() { - if (jj_scan_token(EQ)) return true; - if (jj_scan_token(QMARK)) return true; + static final private boolean jj_3_5() { + if (jj_scan_token(DQUOTE)) return true; return false; } - static final private boolean jj_3R_134() { - if (jj_scan_token(COMMA)) return true; - if (jj_3R_34()) return true; + static final private boolean jj_3R_136() { + if (jj_scan_token(EQ)) return true; + if (jj_scan_token(QMARK)) return true; return false; } @@ -3639,8 +3601,13 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_119() { - if (jj_3R_27()) return true; + static final private boolean jj_3R_73() { + if (jj_3R_78()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_79()) { jj_scanpos = xsp; break; } + } return false; } @@ -3666,16 +3633,6 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_70() { - if (jj_3R_73()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_74()) { jj_scanpos = xsp; break; } - } - return false; - } - static final private boolean jj_3R_121() { if (jj_scan_token(PMIN)) return true; if (jj_scan_token(EQ)) return true; @@ -3683,6 +3640,11 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_80() { + if (jj_scan_token(PLUS)) return true; + return false; + } + static final private boolean jj_3R_154() { if (jj_3R_34()) return true; return false; @@ -3705,8 +3667,14 @@ public class PrismParser implements PrismParserConstants { return false; } - static final private boolean jj_3R_34() { - if (jj_3R_35()) return true; + static final private boolean jj_3R_74() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_80()) { + jj_scanpos = xsp; + if (jj_3R_81()) return true; + } + if (jj_3R_73()) return true; return false; } @@ -3728,16 +3696,59 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_134() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_34()) return true; + return false; + } + static final private boolean jj_3R_133() { if (jj_scan_token(INIT)) return true; return false; } + static final private boolean jj_3R_119() { + if (jj_3R_27()) return true; + return false; + } + + static final private boolean jj_3R_70() { + if (jj_3R_73()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_74()) { jj_scanpos = xsp; break; } + } + return false; + } + static final private boolean jj_3R_33() { if (jj_scan_token(REG_IDENTPRIME)) return true; return false; } + static final private boolean jj_3R_34() { + if (jj_3R_35()) return true; + return false; + } + + static final private boolean jj_3R_29() { + if (jj_3R_27()) return true; + return false; + } + + static final private boolean jj_3R_132() { + if (jj_3R_27()) return true; + return false; + } + + static final private boolean jj_3R_104() { + if (jj_scan_token(LPARENTH)) return true; + if (jj_3R_34()) return true; + if (jj_scan_token(RPARENTH)) return true; + return false; + } + static final private boolean jj_3R_71() { if (jj_3R_75()) return true; if (jj_3R_70()) return true; @@ -3759,36 +3770,39 @@ public class PrismParser implements PrismParserConstants { return false; } + static final private boolean jj_3R_27() { + if (jj_scan_token(REG_IDENT)) return true; + return false; + } + static final private boolean jj_3R_32() { if (jj_scan_token(AND)) return true; if (jj_3R_31()) return true; return false; } - static final private boolean jj_3R_29() { - if (jj_3R_27()) return true; + static final private boolean jj_3R_131() { + if (jj_3R_139()) return true; return false; } - static final private boolean jj_3R_60() { - if (jj_3R_34()) return true; + static final private boolean jj_3R_112() { + if (jj_scan_token(FALSE)) return true; return false; } - static final private boolean jj_3R_58() { + static final private boolean jj_3R_60() { if (jj_3R_34()) return true; return false; } - static final private boolean jj_3R_132() { - if (jj_3R_27()) return true; + static final private boolean jj_3R_111() { + if (jj_scan_token(TRUE)) return true; return false; } - static final private boolean jj_3R_104() { - if (jj_scan_token(LPARENTH)) return true; + static final private boolean jj_3R_58() { if (jj_3R_34()) return true; - if (jj_scan_token(RPARENTH)) return true; return false; } diff --git a/prism/src/parser/PrismParser.jj b/prism/src/parser/PrismParser.jj index ff004004..5f66c996 100644 --- a/prism/src/parser/PrismParser.jj +++ b/prism/src/parser/PrismParser.jj @@ -1304,13 +1304,29 @@ void ExpressionFuncArgs(boolean prop, boolean pathprop, ExpressionFunc func) : Expression ExpressionLiteral(boolean prop, boolean pathprop) : { - Expression ret; + Expression ret = null; } { ( - { ret = new ExpressionLiteral(Expression.INT, new Integer(getToken(0).image)); } + { + try { + int i = Integer.parseInt(getToken(0).image); + ret = new ExpressionLiteral(Expression.INT, new Integer(i)); + } catch (NumberFormatException e) { + // Need to catch this because some matches for regexp REG_INT + // are not valid integers (e.g. too big). + throw generateParseException(); + }} | - { ret = new ExpressionLiteral(Expression.DOUBLE, new Double(getToken(0).image), getToken(0).image); } + { + try { + double d = Double.parseDouble(getToken(0).image); + ret = new ExpressionLiteral(Expression.DOUBLE, new Double(d), getToken(0).image); + } catch (NumberFormatException e) { + // Need to catch this because some matches for regexp REG_DOUBLE + // may not be valid doubles. + throw generateParseException(); + }} | { ret = new ExpressionLiteral(Expression.BOOLEAN, new Boolean(true)); } |