/** * Wird aufgerufen um aus dem bergebenen CFMLString einen Ausdruck auszulesen und diese zu * interpretieren. <br> * Beispiel eines bergebenen String:<br> * <code>session.firstName</code> oder <code>trim(left('test'&var1,3))</code> <br> * EBNF:<br> * <code>spaces impOp;</code> * * @param pc * @param cfml * @return * @throws PageException */ public Object interpret(PageContext pc, ParserString cfml) throws PageException { this.cfml = cfml; this.pc = pc; if (pc != null) fld = ((ConfigImpl) pc.getConfig()).getCombinedFLDs(); if (JSON_ARRAY == null) JSON_ARRAY = fld.getFunction("_jsonArray"); if (JSON_STRUCT == null) JSON_STRUCT = fld.getFunction("_jsonStruct"); cfml.removeSpace(); Ref ref = assignOp(); cfml.removeSpace(); if (cfml.isAfterLast()) { return ref.getValue(); } throw new ExpressionException("Syntax Error, invalid Expression [" + cfml.toString() + "]"); }
/** * Hier werden die verschiedenen Mglichen Werte erkannt und jenachdem wird mit der passenden * Methode weitergefahren <br> * EBNF:<br> * <code>string | number | dynamic | sharp;</code> * * @return CFXD Element * @throws PageException */ private Ref checker() throws PageException { Ref ref = null; // String if (cfml.isCurrentQuoter()) { // mode=STATIC; is at the end of the string function because must set after execution return string(); } // Number if (cfml.isCurrentDigit() || cfml.isCurrent('.')) { // mode=STATIC; is at the end of the string function because must set after execution return number(); } // Dynamic if ((ref = dynamic()) != null) { mode = DYNAMIC; return ref; } // Sharp if ((ref = sharp()) != null) { mode = DYNAMIC; return ref; } // JSON if ((ref = json(JSON_ARRAY, '[', ']')) != null) { mode = DYNAMIC; return ref; } if ((ref = json(JSON_STRUCT, '{', '}')) != null) { mode = DYNAMIC; return ref; } if (cfml.isAfterLast() && cfml.toString().trim().length() == 0) return new LString(""); // else Error throw new ExpressionException( "Syntax Error, Invalid Construct", "at position " + cfml.getPos() + " in [" + cfml.toString() + "]"); }