Ejemplo n.º 1
0
        object Process(ExpectedValueEnum expectedValueType)
        {
            object                 val    = null;
            AntlrInputStream       input  = new AntlrInputStream(paramExprContent);
            ParamExprGrammarLexer  lexer  = new ParamExprGrammarLexer(input);
            CommonTokenStream      tokens = new CommonTokenStream(lexer);
            ParamExprGrammarParser parser = new ParamExprGrammarParser(tokens);

            parser.RemoveErrorListeners();
            ParamExprLogger.resetStream();
            parser.AddErrorListener(new ParamExprErrorListener());
            IParseTree        tree   = parser.param_expr();
            ParseTreeWalker   walker = new ParseTreeWalker();
            ParamExprListener eval   = new ParamExprListener(tokens);

            eval.RevitElement       = _element;
            eval.RevitParameterName = _paramName;

            try
            {
                walker.Walk(eval, tree);
                if (eval.HasValue)
                {
                    val      = eval.Value;
                    UnitType = eval.UnitType;
                }
            }
            catch
            {
            }
            return(val);
        }
        /// <summary>
        /// Checking for syntax error
        /// </summary>
        /// <param name="recognizer">recognizer</param>
        /// <param name="offendingSymbol">offending symbol</param>
        /// <param name="line">line number of the statement</param>
        /// <param name="charPositionInLine">position within the line</param>
        /// <param name="msg">message</param>
        /// <param name="e">recognizer exception</param>
        public override void SyntaxError(IRecognizer recognizer, IToken offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e)
        {
            string         stackList = null;
            IList <string> stack     = ((Parser)recognizer).GetRuleInvocationStack();

            stack.Reverse();
            for (int i = 0; i < stack.Count(); i++)
            {
                if (i == 0)
                {
                    stackList = "[";
                }
                stackList = stackList + " " + stack[i];
            }
            stackList = stackList + "]";
            ParamExprLogger.writeLog("\t\t-> rule stack: " + stackList + "\n");
            ParamExprLogger.writeLog("\t\t-> line " + line + ":" + charPositionInLine + " at " + offendingSymbol + ": " + msg + "\n");
        }