public function assemble(ColumnMetaData $column) { $expression = NULL; if ($column->persistence == FormulaMetaData::PERSISTENCE__CALCULATED) { $this->columnAssemblingStack = array(); array_push($this->columnAssemblingStack, $column->name); try { if (!isset($column->source)) { throw new IllegalStateException(t('Formula expression is not provided')); } $language = isset($column->expressionLanguage) ? $column->expressionLanguage : NULL; $parser = new FormulaExpressionParser($language); $expression = $parser->expressionLanguageHandler->clean($column->source); $expression = $parser->parse($expression, array($this, 'replaceColumnNames')); $expression = $parser->insertMarker('', 0, $expression, TRUE); $lexemes = $parser->expressionLanguageHandler->lex($expression); $syntaxTree = $parser->expressionLanguageHandler->parse($lexemes); $expression = $parser->expressionLanguageHandler->generate($syntaxTree); } catch (Exception $e) { LogHelper::log_error($e); throw new IllegalStateException(t( "Cannot assemble expression for %columnName formula: %error", array('%columnName' => $column->publicName, '%error' => $e->getMessage()))); } array_pop($this->columnAssemblingStack); } else { $expression = $column->name; } return $expression; }