⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csharpast.cs

📁 C#编写的c#编译器
💻 CS
📖 第 1 页 / 共 5 页
字号:
			this.CloseScope();
			return graph;
		}
	}
	#endregion 
		#region	UncheckedStmt *
	public class				UncheckedStmt : Statement
	{
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.UncheckedStmt graph = 
				new Dom.UncheckedStmt();
			return this.GetGraph(graph);
		}	
		public Dom.UncheckedStmt	
			GetGraph(Dom.UncheckedStmt graph)
		{		
			//graph.Clear();
			this.OpenBlockScope();
			base.GetGraph(graph);

			AST tok = this.getFirstChild();
			while(tok != null)
			{
				if(tok is Statements)
				{
					((Statements)tok).GetGraph(graph.Statements);
				}
				tok = tok.getNextSibling();
			}
			this.CloseScope();
			return graph;
		}
	}
	#endregion 
		#region	LockStmt *
	public class				LockStmt : Statement
	{
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.LockStmt graph = 
				new Dom.LockStmt();
			return this.GetGraph(graph);
		}	
		public Dom.LockStmt	
			GetGraph(Dom.LockStmt graph)
		{		
			//graph.Clear();
			this.OpenBlockScope();
			base.GetGraph(graph);

			AST tok = this.getFirstChild();
			while(tok != null)
			{
				if(tok is Statements)
				{
					((Statements)tok).GetGraph(graph.Statements);
				}
				else if(tok is Expression)
				{
					graph.Target = Expression.Parse(((Expression)tok));
				}
				tok = tok.getNextSibling();
			}
			this.CloseScope();
			AddRootExpression(graph.Target, graph.GetType(), "Target");
			return graph;
		}
	}
	#endregion 
		#region	UsingStmt *
	public class				UsingStmt : Statement
	{
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.UsingStmt graph = 
				new Dom.UsingStmt();
			return this.GetGraph(graph);
		}	
		public Dom.UsingStmt
			GetGraph(Dom.UsingStmt graph)
		{		
			//graph.Clear();
			this.OpenBlockScope();
			base.GetGraph(graph);

			AST tok = this.getFirstChild();
			while(tok != null)
			{
				if(tok is Statements)
				{
					((Statements)tok).GetGraph(graph.Statements);
				}
				else if(tok is Expression)
				{
					AST ctok = tok.getFirstChild();
					while(ctok != null)
					{
						if(ctok is Expression)
						{
							graph.Target = Expression.Parse(((Expression)ctok));
						}
						else if(ctok is VariableDeclStmt)
						{
							graph.Declaration = 
								(Dom.VariableDeclStmt)((VariableDeclStmt)ctok).GetGraph();
						}
						ctok = ctok.getNextSibling();
					}
					
				}
				tok = tok.getNextSibling();
			}
			this.CloseScope();
			AddRootExpression(graph.Target, graph.GetType(), "Target");
			return graph;
		}
	}
	#endregion 
		#region	ThrowStmt 
	public class				ThrowStmt : Statement
	{
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.ThrowStmt graph = 
				new Dom.ThrowStmt();
			return this.GetGraph(graph);
		}	
		public Dom.ThrowStmt	
			GetGraph(Dom.ThrowStmt graph)
		{		
			//graph.Clear();
			base.GetGraph(graph);

			AST tok = this.getFirstChild();
			while(tok != null)
			{
				if(tok is Expression)
				{
					graph.ToThrow = Expression.Parse(((Expression)tok));
				}
				tok = tok.getNextSibling();
			}
			AddRootExpression(graph.ToThrow, graph.GetType(), "ToThrow");
			return graph;
		}


	}
	#endregion 
		#region	TryCatchFinallyStmt 
	public class				TryCatchFinallyStmt : Statement
	{
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.TryCatchFinallyStmt graph = 
				new Dom.TryCatchFinallyStmt();
			return this.GetGraph(graph);
		}	
		public Dom.TryCatchFinallyStmt	
			GetGraph(Dom.TryCatchFinallyStmt graph)
		{		
			//graph.Clear();
			base.GetGraph(graph);

			AST tok = this.getFirstChild();
			while(tok != null)
			{
				if(tok is CatchClause)
				{
					this.OpenBlockScope();
					graph.CatchClauses.Add( 
						(Dom.Catch)((CatchClause)tok).GetGraph() );
					this.CloseScope();
				}
				else if(tok is TryStmt)
				{
					this.OpenBlockScope();
					Statements stmtsTok = (Statements)tok.getFirstChild();
					stmtsTok.GetGraph(graph.Try);
					this.CloseScope();
				}
				else if(tok is FinallyStmt)
				{
					this.OpenBlockScope();
					Statements stmtsTok = (Statements)tok.getFirstChild();
					stmtsTok.GetGraph(graph.Finally);
					this.CloseScope();
				}

				tok = tok.getNextSibling();
			}
			return graph;
		}

	}
	#endregion 
			#region	TryStmt *
	public class				TryStmt : CSharpAST
	{
		public override Dom.IGraph	GetGraph()
		{
			throw new MethodAccessException("Code should never call GetGraph() on TryStmt");
		}
		// Holder class
	}
	#endregion 
			#region	CatchClause *
	public class				CatchClause : Statement
	{
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.Catch graph = 
				new Dom.Catch();
			return this.GetGraph(graph);
		}	
		public Dom.Catch	
			GetGraph(Dom.Catch graph)
		{		
			//graph.Clear();
			base.GetGraph(graph);

			AST tok = this.getFirstChild();
			while(tok != null)
			{				
				if(tok is Ident)
					graph.LocalName = tok.getText();
				else if(tok is TypeRef)
				{
					graph.CatchExceptionType = (Dom.TypeRef)((TypeRef)tok).GetGraph();
				}
				else if(tok is Statements)
				{
					((Statements)tok).GetGraph(graph.Statements);
				}

				tok = tok.getNextSibling();
			}
			return graph;
		}
	}
	#endregion 
			#region	FinallyStmt *
	public class				FinallyStmt : CSharpAST
	{
		public override Dom.IGraph	GetGraph()
		{
			throw new MethodAccessException("Code should never call GetGraph() on FinallyStmt");
		}
		// Holder class
	}
	#endregion 
		#region CommentNode *
	public class						CommentNode : Statement
	{
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.CommentStmt graph = 
				new Dom.CommentStmt();
			return this.GetGraph(graph);
		}	
		public Dom.CommentStmt	
			GetGraph(Dom.CommentStmt graph)
		{		
			//graph.Clear();
			//base.GetGraph(graph);

			AST tok = this.getFirstChild();
			while(tok != null)
			{
				if(tok is StringLiteral)
				{
					graph.Comment.CommentText = tok.getText();
				}	

				tok = tok.getNextSibling();
			}
			return graph;
		}

		public Dom.CommentStmtCollection	
			GetGraph(Dom.CommentStmtCollection graph)
		{		
			//graph.Clear();
			//base.GetGraph(graph);

			AST tok = this.getFirstChild();
			while(tok != null)
			{
				if(tok is CommentNode)
				{
					Dom.CommentStmt cs = new Dom.CommentStmt();
					graph.Add( this.GetGraph(cs) );
				}	
				tok = tok.getNextSibling();
			}
			return graph;
		}

	}
	#endregion 
	
	#region	Expressions 
	public class				Expressions : CSharpAST
	{
		public override Dom.IGraph	GetGraph()
		{
			throw new MethodAccessException("Code should never call GetGraph() on Expressions");
		}
	}
	#endregion 
	#region	Expression 
	public class				Expression : CSharpAST
	{
		public override Dom.IGraph	GetGraph()
		{
			throw new MethodAccessException("Code should never call GetGraph() on Expression");
		}
		// maybe get rid of this too...
		public virtual Dom.IGraph	GetGraph(Dom.IGraph graph)
		{
			base.GetGraph(graph);
			return null;
		}
		// from here on use a static method to avoid automatic creation 
		// of generic expression in Dom classes, and then discarding it 
		// for a more specific type.
		// Probably a better way to avoid this...
		public static Dom.Expression Parse(Expression tok)
		{		
			if(tok == null) return null;
			Dom.Expression de = null;

			if(tok is AssignExpr)
				de = (Dom.Expression)((AssignExpr)tok).GetGraph();
			else if(tok is UnaryExpr)
				de = (Dom.UnaryExpr)((UnaryExpr)tok).GetGraph();
			else if(tok is BinaryExpr)
				de = (Dom.BinaryExpr)((BinaryExpr)tok).GetGraph();
			else if(tok is TernaryExpr)
				de = (Dom.TernaryExpr)((TernaryExpr)tok).GetGraph();
			else if(tok is CastExpr)
				de = (Dom.CastExpr)((CastExpr)tok).GetGraph();
			else if(tok is SubExpr)
				de = (Dom.SubExpr)((SubExpr)tok).GetGraph();
				// TODO: ternary expressions
			else if(tok is PrimaryExpression)
				de = PrimaryExpression.ParsePrimaryExpr(tok);

			// if this is 'just' and expression indicator, the meat is below.
			else if(!(tok is PrimaryFollowExpression))
			{
				AST ctok = tok.getFirstChild();
				try
				{
					Expression etok = (Expression)ctok;
					return Expression.Parse(etok);
				}
				catch(Exception e)
				{
					Console.WriteLine("Missed Expression type: " + ctok.Type + " - " + e);
				}

			}
			AST ntok = tok.getNextSibling();
			if(ntok != null && ntok is PrimaryFollowExpression)
			{
				de = PrimaryFollowExpression.ParseFollow(
					(PrimaryFollowExpression)ntok, de);
			}
			return de;
		}

	}
	#endregion 
		#region	AssignExpr *
	public class				AssignExpr : Expression
	{
		// Left Expression, Right Expression
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.AssignExpr graph = 
				new Dom.AssignExpr();
			return this.GetGraph(graph);
		}	
		public Dom.AssignExpr	
			GetGraph(Dom.AssignExpr graph)
		{		
			//graph.Clear();
			base.GetGraph(graph);
			graph.Operator = 
				Dom.AssignExpr.OperatorFromString(this.getText());

			AST tok = this.getFirstChild();
			while(tok != null)
			{
				if(tok is Expression)
				{
					string side = tok.getText(); // left or right
					if(side == "left")
					{
						AST ltok = tok.getFirstChild();
						if(ltok is Expression)
							graph.Left = Expression.Parse(((Expression)ltok));
					}
					else if (side == "right")
					{
						AST rtok = tok.getFirstChild();
						if(rtok is Expression)
							graph.Right = Expression.Parse(((Expression)rtok));
					}
				}
				tok = tok.getNextSibling();
			}
			return graph;
		}
			 
					 			
	}				 
	#endregion		 
		#region	UnaryExpr *
	public class				UnaryExpr : Expression
	{
		// Left Expression, Right Expression
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.UnaryExpr graph = 
				new Dom.UnaryExpr();
			return this.GetGraph(graph);
		}	
		public Dom.UnaryExpr	
			GetGraph(Dom.UnaryExpr graph)
		{		
			//graph.Clear();
			base.GetGraph(graph);
			graph.Operator = 
				Dom.UnaryExpr.OperatorFromString(this.getText());

			AST tok = this.getNextSibling();
			if(tok is Expression)
			{
				graph.Right = Expression.Parse(((Expression)tok));
			}

			return graph;
		}	
	}
	#endregion 
		#region	BinaryExpr *
	public class				BinaryExpr : Expression
	{
		// Left Expression, Right Expression
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.BinaryExpr graph = 
				new Dom.BinaryExpr();
			return this.GetGraph(graph);
		}	
		public Dom.BinaryExpr	
			GetGraph(Dom.BinaryExpr graph)
		{		
			//graph.Clear();
			base.GetGraph(graph);
			graph.Operator = 
				Dom.BinaryExpr.OperatorFromString(this.getText());

			AST tok = this.getFirstChild();
			while(tok != null)
			{
				if(tok is Expression)
				{
					string side = tok.getText(); // left or right
					if(side == "left")
					{
						AST ltok = tok.getFirstChild();
						if(ltok is Expression)
							graph.Left = Expression.Parse(((Expression)ltok));
					}
					else if (side == "right")
					{
						AST rtok = tok.getFirstChild();
						if(rtok is Expression)
							graph.Right = Expression.Parse(((Expression)rtok));
					}
				}

				tok = tok.getNextSibling();
			}
			return graph;
		}
	}
	#endregion 
		#region	TernaryExpr 
	public class				TernaryExpr : Expression
	{
		public override Dom.IGraph			GetGraph()				
		{	
			Dom.TernaryExpr graph = 
				new Dom.TernaryExpr();
			return this.GetGraph(graph);
		}	
		public Dom.TernaryExpr	
			GetGraph(Dom.TernaryExpr graph)
		{		
			base.GetGraph(graph);

			AST tok = this.getFirstChild();
			while(tok != null)
			{
				if(tok is Expression)
				{
					string side = tok.getText(); // left or right
					if(side == "test")
					{
						AST tstok = tok.getFirstChild();
						if(tstok is Expression)
							graph.Test = Expression.Parse(((Expression)tstok));
					}
					else if(side == "true")
					{
						AST ttok = tok.getFirstChi

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -