コード例 #1
0
 private void Write(PythonNode stmt, bool notlambda = true)
 {
     if (stmt is PythonAstNode)
     {
         Write(stmt as PythonAstNode);
     }
     else if (stmt is SuiteStatementNode)
     {
         Write(stmt as SuiteStatementNode);
     }
     else if (stmt is ExpressionStatementNode)
     {
         Write(stmt as ExpressionStatementNode, notlambda);
     }
     else if (stmt is NameExpressionNode)
     {
         Write(stmt as NameExpressionNode);
     }
     else if (stmt is OrExpressionNode)
     {
         Write((OrExpressionNode)stmt);
     }
     else
     {
         throw new NotImplementedException(stmt.GetType().ToString());
     }
 }
コード例 #2
0
ファイル: NodeInfo.cs プロジェクト: neostoic/refazer
        public static NodeInfo CreateInfo(PythonNode node)
        {
            var     type = node.GetType().Name;
            dynamic nodeValue;

            switch (type)
            {
            case "FunctionDefinitionNode":
                nodeValue = ((FunctionDefinition)node.InnerNode).Name;
                break;

            case "ConstantExpressionNode":
                nodeValue = ((ConstantExpression)node.InnerNode).Value;
                break;

            case "AugmentedAssignStatementNode":
                nodeValue = ((AugmentedAssignStatement)node.InnerNode).Operator;
                break;

            case "BinaryExpressionNode":
                nodeValue = ((BinaryExpression)node.InnerNode).Operator;
                break;

            case "NameExpressionNode":
                nodeValue = ((NameExpression)node.InnerNode).Name;
                break;

            case "TupleExpressionNode":
                nodeValue = ((TupleExpression)node.InnerNode).IsExpandable;
                break;

            case "ParameterNode":
                nodeValue = ((Parameter)node.InnerNode).Name;
                break;

            case "ArgNode":
            case "CallExpressionNode":
            case "LambdaExpressionNode":
            case "SuiteStatementNode":
            case "IfStatementNode":
            case "IfStatementTestNode":
            case "AssignmentStatementNode":
            case "ReturnStatementNode":
            case "ExpressionStatementNode":
            case "WhileStatementNode":
            case "ParenthesisExpressionNode":
            case "ForStatementNode":
            case "ConditionalExpressionNode":
                nodeValue = null;
                break;

            default:
                throw new NotImplementedException();
            }
            return(nodeValue == null ? new NodeInfo(type) : new NodeInfo(type, nodeValue));
        }
コード例 #3
0
        public PythonNode GetCorrespondingNodeByBinding(PythonNode node)
        {
            if (Id == node.Id && Equals(Value, node.Value) && GetType() == node.GetType())
            {
                return(this);
            }

            foreach (var child in Children)
            {
                var childResult = child.GetCorrespondingNodeByBinding(node);
                if (childResult != null)
                {
                    return(childResult);
                }
            }
            return(null);
        }
コード例 #4
0
        public bool ContainsByBinding(PythonNode node)
        {
            if (Id == node.Id && Equals(Value, node.Value) && GetType() == node.GetType())
            {
                return(true);
            }

            foreach (var child in Children)
            {
                var contains = child.ContainsByBinding(node);
                if (contains)
                {
                    return(true);
                }
            }
            return(false);
        }
コード例 #5
0
 public bool MatchTemplate(PythonNode node)
 {
     if (node.GetType() != GetType())
     {
         return(false);
     }
     if (Children.Count != node.Children.Count)
     {
         return(false);
     }
     for (var i = 0; i < Children.Count; i++)
     {
         if (!Children[i].MatchTemplate(node.Children[i]))
         {
             return(false);
         }
     }
     return(true);
 }
コード例 #6
0
ファイル: Unparser.cs プロジェクト: neostoic/refazer
 private void Write(PythonNode stmt, bool notlambda = true)
 {
     if (stmt is PythonAstNode)
     {
         Write(stmt as PythonAstNode);
     }
     else if (stmt is SuiteStatementNode)
     {
         Write(stmt as SuiteStatementNode);
     }
     else if (stmt is FunctionDefinitionNode)
     {
         Write(stmt as FunctionDefinitionNode);
     }
     else if (stmt is ReturnStatementNode)
     {
         Write(stmt as ReturnStatementNode, notlambda);
     }
     else if (stmt is IfStatementNode)
     {
         Write(stmt as IfStatementNode);
     }
     else if (stmt is AssignmentStatementNode)
     {
         Write(stmt as AssignmentStatementNode);
     }
     else if (stmt is AugmentedAssignStatementNode)
     {
         Write(stmt as AugmentedAssignStatementNode);
     }
     else if (stmt is ForStatementNode)
     {
         Write(stmt as ForStatementNode);
     }
     else if (stmt is WhileStatementNode)
     {
         Write(stmt as WhileStatementNode);
     }
     else if (stmt is ExpressionStatementNode)
     {
         Write(stmt as ExpressionStatementNode, notlambda);
     }
     else if (stmt is ImportStatementNode)
     {
         Write(stmt as ImportStatementNode);
     }
     else if (stmt is NameExpressionNode)
     {
         Write(stmt as NameExpressionNode);
     }
     else if (stmt is BinaryExpressionNode)
     {
         Write(stmt as BinaryExpressionNode);
     }
     else if (stmt is ConstantExpressionNode)
     {
         Write(stmt as ConstantExpressionNode);
     }
     else if (stmt is CallExpressionNode)
     {
         Write(stmt as CallExpressionNode);
     }
     else if (stmt is ArgNode)
     {
         Write((ArgNode)stmt);
     }
     else if (stmt is TupleExpressionNode)
     {
         Write(stmt as TupleExpressionNode);
     }
     else if (stmt is ParenthesisExpressionNode)
     {
         Write((ParenthesisExpressionNode)stmt);
     }
     else if (stmt is MemberExpressionNode)
     {
         Write((MemberExpressionNode)stmt);
     }
     else if (stmt is LambdaExpressionNode)
     {
         Write((LambdaExpressionNode)stmt);
     }
     else if (stmt is IndexExpressionNode)
     {
         Write((IndexExpressionNode)stmt);
     }
     else if (stmt is ListExpressionNode)
     {
         Write((ListExpressionNode)stmt);
     }
     else if (stmt is OrExpressionNode)
     {
         Write((OrExpressionNode)stmt);
     }
     else if (stmt is UnaryExpressionNode)
     {
         Write((UnaryExpressionNode)stmt);
     }
     else if (stmt is ParameterNode)
     {
         Write((ParameterNode)stmt);
     }
     else if (stmt is PrintStatementNode)
     {
         Write((PrintStatementNode)stmt);
     }
     else if (stmt is FromImportStatementNode)
     {
         Write((FromImportStatementNode)stmt);
     }
     else
     {
         throw new NotImplementedException(stmt.GetType().ToString());
     }
 }