public override void Enter(syntax_tree_node st)
 {
     if (d.ContainsKey(st.GetType()))
         d[st.GetType()] += 1;
     else d[st.GetType()] = 1;
     if (st is expression)
         exprcount++;
     if (st is statement)
         statcount++;
 }
示例#2
0
        public void prepare_node(syntax_tree_node subnode, string node_name)
		{
			if (subnode==null)
			{
				return;
			}
			prepare_node_with_text(subnode,node_name+":"+subnode.GetType().Name);
		}
 public override void Exit(syntax_tree_node st)
 {
     if (st is procedure_definition || st is class_definition)
     {
         if (PrintInfo)
             Console.WriteLine("-: " + st.GetType().Name);
         list.RemoveAt(list.Count - 1);
     }
     base.Exit(st);
 }
 public override void Enter(syntax_tree_node st)
 {
     base.Enter(st);
     if (st is procedure_definition || st is class_definition)
     {
         list.Add(st as declaration);
         if (PrintInfo)
             Console.Write("+: "+st.GetType().Name);
     }
 }
示例#5
0
 public override void Enter(syntax_tree_node st)
 {
     base.Enter(st);
     if (!(st is procedure_definition || st is block || st is statement_list 
         || st.GetType() == typeof(case_node) || st.GetType() == typeof(for_node) || st.GetType() == typeof(foreach_stmt) 
         || st.GetType() == typeof(if_node) 
         || st.GetType() == typeof(repeat_node) || st.GetType() == typeof(while_node) 
         || st.GetType() == typeof(with_statement) || st is try_stmt || st.GetType() == typeof(lock_stmt)))
     {
         //visitNode = false;
     }
 }
 public override void Exit(syntax_tree_node st)
 {
     if (st.GetType() == typeof(program_module))
     {
         var t = (DateTime.Now - d).Milliseconds;
         fs.WriteLine(t.ToString());
         fs.Close();
     }
         
 }
 public override void DefaultVisit(syntax_tree_node n)
 {
     fs.WriteLine(n.GetType().Name);
     base.DefaultVisit(n);
 }
 public override void Exit(syntax_tree_node st)
 {
     Tabs -= 2;
     if (st.GetType()==typeof(program_module))
         fs.Close();
 }
        public virtual void Enter(syntax_tree_node st)
        {
            if (st is statement_list)
            {
                Println("begin");
                off += 2;
            }
            else if (st is type_declarations)  // надо в visit и самому всё обрабатывать
            {
                var tds = st is type_declarations;
                Println("type ");
                off += 2;
            }
            else if (st is case_variant)
            {
                var td = st as case_variant;
                Println(td.conditions.ToString()+": ");
                off += 2;
                //ProcessNode(td.type_def);
                //visitNode = false;
            }
            else if (st is type_declaration)
            {
                var td = st as type_declaration;
                Print(td.type_name + " = ");
                ProcessNode(td.type_def);
                visitNode = false;
            }
            else if (st is class_definition)
            {
                var cd = st as class_definition;
                PrintNoOffset("class");
                if (cd.class_parents != null && cd.class_parents.types.Count > 0)
                {
                    PrintlnNoOffset("(" + cd.class_parents.ToString() + ")");
                }
                else
                    PrintlnNoOffset("");
                off += 2;
                ProcessNode(cd.body);
                visitNode = false;
            }
            else if (st is access_modifer_node)
            {
                var am = st as access_modifer_node;
                Println(am.access_level.ToString());

            }
            else if (st is variable_definitions)
            {
                var vds = st as variable_definitions;
                Println("var");
                off += 2;
            }
            else if (st is var_def_statement)
            {
                var vds = st as var_def_statement;
                Println(vds.ToString());
            }
            else if (st is empty_statement || st is declarations || st is block || st is class_body || st is class_members || st is case_variants || st is program_module)
            {
            }
            else if (st is if_node)
            {
                var ifn = st as if_node;

                Println("if " + ifn.condition.ToString() + " then");
                off += 2;
                ProcessNode(ifn.then_body);
                if (ifn.else_body == null)
                {
                    visitNode = false;
                    return;
                }
                off -= 2;
                Println("else ");
                off += 2;
                ProcessNode(ifn.else_body);
                visitNode = false;
            }
            else if (st is while_node)
            {
                var wn = st as while_node;

                Println("while " + wn.expr.ToString() + " do");
                off += 2;
            }
            else if (st is case_node)
            {
                var cn = st as case_node;

                Println("case " + cn.param.ToString() + " of");
                off += 2;
            }
            else if (st is labeled_statement)
            {
                var lst = st as labeled_statement;

                Println(lst.label_name.name + ": ");
                ProcessNode(lst.to_statement);
                visitNode = false;
            }
            else if (st is var_statement || st is procedure_header)
            {
                Println(st.ToString());
                visitNode = false;
            }
            else if (st is procedure_definition)
            {
                Println("");
            }
            else if (st is statement || st is variable_definitions || st is label_definitions)
            {
                PrintlnNode(st);
                if (st is labeled_statement)
                    visitNode = false;                    
            }
            else if (st is token_info)
            {
                var s = st.ToString();
                if (s == "begin" || s == "end")
                    return;
                PrintlnNode(st);
            }
            else
            {
                var q = st.GetType().GetMethod("ToString", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);
                if (q == null)
                    Println(st.GetType().Name);
            }
        }
 public void PrintlnNode(syntax_tree_node st)
 {
     if (printNodeType)
         Console.Write(st.GetType().Name + ": ");
     Console.WriteLine(new string(' ', off)+st);
 }