예제 #1
0
        public static List <AST.AssociativeAST.AssociativeNode> GetAstNodes(AST.AssociativeAST.CodeBlockNode codeBlockNode)
        {
            var nodes = new List <AST.AssociativeAST.AssociativeNode>();

            if (codeBlockNode != null)
            {
                nodes.AddRange(codeBlockNode.Body);
            }
            return(nodes);
        }
예제 #2
0
        /// <summary>
        /// Parse simple RHS expression
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="core"></param>
        /// <returns></returns>
        public static AST.AssociativeAST.AssociativeNode ParseRHSExpression(string expression, Core core)
        {
            if (string.IsNullOrEmpty(expression))
            {
                throw new ArgumentException("expression");
            }

            if (core == null)
            {
                throw new ArgumentException("core");
            }

            var currentParsingMode = core.ParsingMode;
            var currentParsingFlag = core.IsParsingCodeBlockNode;

            core.ParsingMode            = ParseMode.AllowNonAssignment;
            core.IsParsingCodeBlockNode = true;

            AST.AssociativeAST.CodeBlockNode cbn = null;
            try
            {
                expression = expression.Trim();
                if (!expression.EndsWith(";"))
                {
                    expression += ";";
                }

                expression = "__dummy = " + expression;
                ParseResult parseResult = ParseWithCore(expression, core);
                cbn = parseResult.CodeBlockNode;
            }
            catch (BuildHaltException)
            {
            }

            core.ParsingMode            = currentParsingMode;
            core.IsParsingCodeBlockNode = currentParsingFlag;

            if (cbn == null || !cbn.Body.Any())
            {
                return(null);
            }

            var expr = cbn.Body[0] as AST.AssociativeAST.BinaryExpressionNode;

            return(expr == null ? null : expr.RightNode);
        }