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); }
/// <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); }