当前位置: 首页>>代码示例>>C#>>正文


C# Ast.GetType方法代码示例

本文整理汇总了C#中Ast.GetType方法的典型用法代码示例。如果您正苦于以下问题:C# Ast.GetType方法的具体用法?C# Ast.GetType怎么用?C# Ast.GetType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Ast的用法示例。


在下文中一共展示了Ast.GetType方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Walk

 private string Walk(Ast.Tree tree, string ret)
 {
     Type type = tree.GetType().UnderlyingSystemType;
     PropertyInfo item = type.GetProperty("Item");
                                                                                                                                           
     if (tree.IsVar)
     {
         Ast.Tree next = ((Ast.Tree.Var) tree).Item;
         ret += string.Format("'var',[{0}]", Walk(next, ret));
     }
     else if (tree.IsIdentifier)
     {
         string identifier = ((Ast.Tree.Identifier) tree).Item;
         ret += string.Format("'{0}'", identifier);
     }
     else if (tree.IsCompoundAssign)
     {
         Ast.Tree.CompoundAssign compoundAssign = (Ast.Tree.CompoundAssign)tree;
        // ret += string.Format("[{0},{1}]", Walk(compoundAssign.Item1, ret), Walk(compoundAssign.Item2, ret));
         throw new NotImplementedException();
     }
     else if (tree.IsAssign)
     {
         Ast.Tree.Assign assign = (Ast.Tree.Assign) tree;
         ret += string.Format("[{0},{1}]", Walk(assign.Item1, ret), Walk(assign.Item2, ret));
     }
     else if (tree.IsBinary)
     {
         Ast.Tree.Binary binary = (Ast.Tree.Binary) tree;
         var operators = new Dictionary<string, string>
                             {
                                 //{"add", "+"},
                                 {"Add", "+"}
                             };
         ret += string.Format("['binary','{0}',{1},{2}]",
                              operators[binary.Item1.ToString()],
                              Walk(binary.Item2, ret),
                              Walk(binary.Item3, ret));
     }
     else if (tree.IsNumber)
     {
         double number = ((Ast.Tree.Number) tree).Item;
         ret += string.Format("['num',{0}]", number);
     }
     else if (tree.IsBlock)
     {
         FSharpList<Ast.Tree> trees = ((Ast.Tree.Block) tree).Item;
         IList<string> arr = new List<string>();
         foreach (Ast.Tree next in trees)
         {
             arr.Add(Walk(next, ret));
         }
         ret += string.Format("[{0}]", string.Join(",",arr.ToArray()));
     }
     else if (tree.IsArray)
     {
         ret += "array";
         FSharpList<Ast.Tree> trees = ((Ast.Tree.Array) tree).Item;
         foreach (Ast.Tree next in trees)
         {
             ret += string.Format("[{0}]", Walk(next, ret));
         }
     }
     else
     {
         throw new NotImplementedException("Type: " + type);
     }
     return ret;
 }
开发者ID:bondehagen,项目名称:Uglify.NET,代码行数:69,代码来源:AstTranslator.cs

示例2: Walk

 public void Walk(Ast.INode node, StringBuilder sb)
 {
     if(node is Ast.SequenceNode)
     {
         sb.AppendLine(string.Format("{0} (seq)", node.GetType()));
         Ast.SequenceNode seq = (Ast.SequenceNode)node;
         foreach(Ast.INode child in seq.Elements) {
             Walk(child, sb);
         }
     }
     else
         sb.AppendLine(string.Format("{0} = {1}", node.GetType(), node.ToString()));
 }
开发者ID:pombredanne,项目名称:Serpent,代码行数:13,代码来源:ParserTest.cs

示例3: AnalyzeImpl

        /// <summary>
        /// Used to analyze scriptbloct, functionmemberast or functiondefinitionast
        /// </summary>
        /// <param name="ast"></param>
        /// <returns></returns>
        public void AnalyzeImpl(Ast ast, VariableAnalysis outerAnalysis)
        {
            if (!(ast is ScriptBlockAst || ast is FunctionMemberAst || ast is FunctionDefinitionAst))
            {
                return;
            }

            _variables = FindAllVariablesVisitor.Visit(ast);

            Init();

            if (ast is FunctionMemberAst || ast is FunctionDefinitionAst)
            {
                IEnumerable<ParameterAst> parameters = FindParameters(ast, ast.GetType());
                if (parameters != null)
                {
                    ProcessParameters(parameters);
                }
            }
            else
            {
                ScriptBlockAst sbAst = ast as ScriptBlockAst;
                if (sbAst != null && sbAst.ParamBlock != null && sbAst.ParamBlock.Parameters != null)
                {
                    ProcessParameters(sbAst.ParamBlock.Parameters);
                }
            }

            if (ast is FunctionMemberAst)
            {
                (ast as FunctionMemberAst).Body.Visit(this.Decorator);
            }
            else if (ast is FunctionDefinitionAst)
            {
                (ast as FunctionDefinitionAst).Body.Visit(this.Decorator);
            }
            else
            {
                ast.Visit(this.Decorator);
            }

            Ast parent = ast;

            while (parent.Parent != null)
            {
                parent = parent.Parent;
            }

            List<TypeDefinitionAst> classes = parent.FindAll(item =>
                item is TypeDefinitionAst && (item as TypeDefinitionAst).IsClass, true)
                .Cast<TypeDefinitionAst>().ToList();

            if (outerAnalysis != null)
            {
                // Initialize the variables from outside
                var outerDictionary = outerAnalysis.InternalVariablesDictionary;
                foreach (var details in outerDictionary.Values)
                {
                    if (details.DefinedBlock != null)
                    {
                        var assignTarget = new AssignmentTarget(details.RealName, details.Type);
                        assignTarget.Constant = details.Constant;
                        if (!_variables.ContainsKey(assignTarget.Name))
                        {
                            _variables.Add(assignTarget.Name, new VariableAnalysisDetails
                            {
                                Name = assignTarget.Name,
                                RealName = assignTarget.Name,
                                Type = assignTarget.Type
                            });
                        }
                        Entry.AddFirstAst(assignTarget);
                    }
                }

                foreach (var key in _variables.Keys)
                {
                    if (outerDictionary.ContainsKey(key))
                    {
                        var outerItem = outerDictionary[key];
                        var innerItem = _variables[key];
                        innerItem.Constant = outerItem.Constant;
                        innerItem.Name = outerItem.Name;
                        innerItem.RealName = outerItem.RealName;
                        innerItem.Type = outerItem.Type;
                    }
                }
            }

            var dictionaries = Block.SparseSimpleConstants(_variables, Entry, classes);
            VariablesDictionary = dictionaries.Item1;
            InternalVariablesDictionary = new Dictionary<string, VariableAnalysisDetails>(StringComparer.OrdinalIgnoreCase);

            foreach (var KVP in dictionaries.Item2)
            {
//.........这里部分代码省略.........
开发者ID:nick4eva,项目名称:PSScriptAnalyzer,代码行数:101,代码来源:VariableAnalysis.cs


注:本文中的Ast.GetType方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。