function parseTriggerExpressions($expressions, $askData = false)
{
    static $scparser, $triggersData;
    global $triggerExpressionRules;
    if (!$scparser) {
        $scparser = new CStringParser($triggerExpressionRules);
    }
    if (!is_array($expressions)) {
        $expressions = array($expressions);
    }
    $data = array();
    $noErrors = true;
    foreach ($expressions as $key => $str) {
        if (!isset($triggersData[$str])) {
            $tmp_expr = $str;
            //SDI($tmp_expr);
            if ($scparser->parse($tmp_expr)) {
                $triggersData[$str]['expressions'] = $scparser->getElements('expression');
                $triggersData[$str]['hosts'] = $scparser->getElements('server');
                $triggersData[$str]['keys'] = $scparser->getElements('keyName');
                $triggersData[$str]['keysParams'] = $scparser->getElements('keyParams');
                $triggersData[$str]['keysFunctions'] = $scparser->getElements('keyFunctionName');
                $triggersData[$str]['macros'] = array_merge($scparser->getElements('macro'), $scparser->getElements('macroNum'), $scparser->getElements('customMacro'));
                $triggersData[$str]['customMacros'] = $scparser->getElements('customMacro');
                $triggersData[$str]['allMacros'] = array_merge($triggersData[$str]['expressions'], $triggersData[$str]['macros']);
                $triggersData[$str]['tree'] = $scparser->getTree();
            } else {
                $triggersData[$str]['errors'] = $scparser->getErrors();
                $noErrors = false;
            }
        }
        $data[$str] =& $triggersData[$str];
    }
    return $askData ? $data : $noErrors;
}