/** * Transfomiert einen numerische Wert. Die L¦nge des numerischen Wertes interessiert nicht zu * ᅵbersetzungszeit, ein "Overflow" fhrt zu einem Laufzeitfehler. Da die zu erstellende CFXD, * bzw. dieser Transfomer, keine Vorwegnahme des Laufzeitsystems vornimmt. <br> * EBNF:<br> * <code>["+"|"-"] digit {digit} {"." digit {digit}};</code> * * @return CFXD Element * @throws PageException */ private Ref number() throws PageException { // check first character is a number literal representation // if(!cfml.isCurrentDigit()) return null; StringBuffer rtn = new StringBuffer(6); // get digit on the left site of the dot if (cfml.isCurrent('.')) rtn.append('0'); else digit(rtn); // read dot if exist if (cfml.forwardIfCurrent('.')) { rtn.append('.'); int before = cfml.getPos(); digit(rtn); if (before < cfml.getPos() && cfml.forwardIfCurrent('e')) { if (cfml.isCurrentDigit()) { rtn.append('e'); digit(rtn); } else { cfml.previous(); } } // read right side of the dot if (before == cfml.getPos()) throw new ExpressionException("Number can't end with [.]"); // rtn.append(rightSite); } cfml.removeSpace(); mode = STATIC; return new LNumber(rtn.toString()); }