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

📄 csharpgen.cs

📁 C#编写的c#编译器
💻 CS
📖 第 1 页 / 共 3 页
字号:
			Parse(gr.Condition);
			sb.Write(")");
			OpenBlock();
            Parse(gr.Cases);
			CloseBlock();
		}
		#endregion
		#region Case *
		public override void ParseElement(Case gr)
		{
			if(gr.IsDefault)
			{
				sb.Write("default :");
			}
			else
			{
				sb.Write("case ");
				Parse(gr.Condition);
				sb.Write(" :");
			}
			OpenBlock();
            Parse(gr.Statements);
			CloseBlock();
		}
		#endregion
		#region IterationStmt *
		public override void ParseElement(IterationStmt gr)
		{
			if(gr.TestFirst)
			{
				termStmt = false;
				sb.Write("for(");
				if(gr.Init != null)
				{						
					string comma = "";
					foreach(Statement o in gr.Init)
					{
						sb.Write(comma);
						Parse(o);
						comma = ", ";
					}
				}
				sb.Write("; ");
				Parse(gr.Test);
				sb.Write("; ");
				if(gr.Increment != null)
				{						
					string comma = "";
					foreach(Statement o in gr.Increment)
					{
						sb.Write(comma);
						Parse(o);
						comma = ", ";
					}
				}
				sb.Write(")");
				termStmt = true;
				OpenBlock();
				Parse(gr.Statements);
				CloseBlock();					
			}
			else
			{
				sb.Write("do");
				OpenBlock();
				Parse(gr.Statements);
				CloseBlock();
				sb.Write("while(");
				Parse(gr.Test);
				sb.WriteLine(");");
			}
		}
		#endregion
		#region ForEachStmt
		public override void ParseElement(ForEachStmt gr)
		{
			sb.Write("foreach(");
			Parse(gr.Type);
			sb.Write(" " + gr.Name + " in ");
			Parse(gr.Collection);
			sb.Write(")");
			OpenBlock();
			Parse(gr.Statements);
			CloseBlock();			
		}
		#endregion
		#region GotoStmt
		public override void ParseElement(GotoStmt gr)
		{			
			sb.Write("goto " + gr.Label);
			if(gr.CaseLabel != null)
			{
				sb.Write(" " );
				Parse(gr.CaseLabel);
			}
			sb.WriteLine(";");
		}
		#endregion
		#region LabeledStmt
		public override void ParseElement(LabeledStmt gr)
		{
			int ind = sb.Indent;
			int tabSize = 4; // how to get this..?
			sb.Indent = 0;
			string lbl = gr.Label + ":";
			sb.Write(lbl.PadRight(ind * tabSize, ' ') );
			Parse(gr.Statement);
			sb.Indent = ind;
		}
		#endregion
		#region ReturnStmt
		public override void ParseElement(ReturnStmt gr)
		{
			sb.Write("return");
			if(gr.Expression != null)
			{
				sb.Write(" ");
				Parse(gr.Expression);
			}
			sb.WriteLine(";");
		}
		#endregion
		#region BreakStmt
		public override void ParseElement(BreakStmt gr)
		{
			sb.WriteLine("break;");
		}
		#endregion
		#region ContinueStmt
		public override void ParseElement(ContinueStmt gr)
		{
			sb.WriteLine("continue;");
		}
		#endregion
		#region CheckedStmt
		public override void ParseElement(CheckedStmt gr)
		{
			sb.Write("checked");
			OpenBlock();
			Parse(gr.Statements);
			CloseBlock();
		}
		#endregion
		#region UncheckedStmt
		public override void ParseElement(UncheckedStmt gr)
		{
			sb.Write("unchecked");
			OpenBlock();
			Parse(gr.Statements);
			CloseBlock();
		}
		#endregion
		#region LockStmt
		public override void ParseElement(LockStmt gr)
		{
			sb.Write("lock(");
			Parse(gr.Target);
			sb.Write(")");
			OpenBlock();
			Parse(gr.Statements);
			CloseBlock();
		}
		#endregion
		#region UsingStmt
		public override void ParseElement(UsingStmt gr)
		{
			sb.Write("using(");
			if(gr.DeclaresResource)
			{
				termStmt = false;
				Parse(gr.Declaration);
				termStmt = true;
			}
			else
			{
				Parse(gr.Target);
			}
			sb.Write(")");
			OpenBlock();
			Parse(gr.Statements);
			CloseBlock();
		}
		#endregion
		#region ThrowStmt
		public override void ParseElement(ThrowStmt gr)
		{
			sb.Write("throw(");
			Parse(gr.ToThrow);
			sb.WriteLine(");");
		}
		#endregion
		#region TryCatchFinallyStmt
		public override void ParseElement(TryCatchFinallyStmt gr)
		{
			sb.Write("try");
			OpenBlock();
			Parse(gr.Try);
			CloseBlock();
			Parse(gr.CatchClauses);
			Parse(gr.Finally);
		}
		#endregion
		#region Catch
		public override void ParseElement(Catch gr)
		{
			sb.Write("catch(");
			Parse(gr.CatchExceptionType);
			sb.Write(gr.LocalName);
			sb.Write(")");
			OpenBlock();
			Parse(gr.Statements);
			CloseBlock();
		}
		#endregion
		#region AttachDelegateStmt TODO: not parsing yet
		public override void ParseElement(AttachDelegateStmt gr)
		{
			//gr.Event;
			//gr.Listener;
		}
		#endregion
		#region RemoveDelegateStmt TODO: not parsing yet
		public override void ParseElement(RemoveDelegateStmt gr)
		{
		}
		#endregion

		#region AssignExpr
		public override void ParseElement(AssignExpr gr)
		{
			Parse(gr.Left);
			sb.Write(" " + AssignExpr.StringFromOperator(gr.Operator) + " ");
			Parse(gr.Right);
		}
		#endregion
		#region UnaryExpr
		public override void ParseElement(UnaryExpr gr)
		{
			sb.Write(UnaryExpr.StringFromOperator(gr.Operator));
			Parse(gr.Right);
		}
		#endregion
		#region BinaryExpr
		public override void ParseElement(BinaryExpr gr)
		{
			Parse(gr.Left);
			sb.Write(" " + BinaryExpr.StringFromOperator(gr.Operator) + " ");
			Parse(gr.Right);
		}
		#endregion
		#region Ternary
		public override void ParseElement(TernaryExpr gr)
		{
			Parse(gr.Test);
			sb.Write(" ? ");
			Parse(gr.True);
			sb.Write(" : ");
			Parse(gr.False);
		}
		#endregion
		#region CastExpr
		public override void ParseElement(CastExpr gr)
		{
			sb.Write("(");
			addSpace = false;
			Parse(gr.TargetType);
			addSpace = true;
			sb.Write(")");
			Parse(gr.Expression);
		}
		#endregion
		#region SubExpr
		public override void ParseElement(SubExpr gr)
		{
			sb.Write("(");
			addSpace = false;
			Parse(gr.Expression);
			addSpace = true;
			sb.Write(")");
		}
		#endregion
		#region UnknownReference
		public override void ParseElement(UnknownReference gr)
		{
			sb.Write(gr.VariableName);
		}
		#endregion
		#region ThisRef
		public override void ParseElement(ThisRef gr)
		{
			sb.Write("this");
		}
		#endregion
		#region BaseRef
		public override void ParseElement(BaseRef gr)
		{
			sb.Write("base");
		}
		#endregion
		#region PropertySetValueRef
		public override void ParseElement(PropertySetValueRef gr)
		{
			sb.Write("value");
		}
		#endregion
		#region ArgumentRef
		public override void ParseElement(ArgumentRef gr)
		{
			sb.Write(gr.ParameterName);
		}
		#endregion
		#region LocalRef
		public override void ParseElement(LocalRef gr)
		{
			sb.Write(gr.VariableName);
		}
		#endregion
		#region TypeOfExpr
		public override void ParseElement(TypeOfExpr gr)
		{
			sb.Write("typeof(");
			Parse(gr.Type);
			sb.Write(")");
		}
		#endregion
		#region FieldRef
		public override void ParseElement(FieldRef gr)
		{
			if(gr.Target != null)
			{
				Parse(gr.Target);
				sb.Write(".");
			}
			sb.Write(gr.FieldName);
		}
		#endregion
		#region ArrayElementRef
		public override void ParseElement(ArrayElementRef gr)
		{
			if(gr.Target != null)
			{
				Parse(gr.Target);
			}
			sb.Write("[");
			if(gr.Indices != null)
			{
				string comma = "";
				foreach(Expression o in gr.Indices)
				{
					sb.Write(comma);
					Parse(o);
					comma = ", ";
				}
			}
			sb.Write("]");

		}
		#endregion
		#region MethodRef
		public override void ParseElement(MethodRef gr)
		{
			if(gr.Target != null)
			{
				Parse(gr.Target);
			}
			else if(gr.MethodName != "")
				sb.Write(gr.MethodName);
		}
		#endregion
		#region PropertyRef
		public override void ParseElement(PropertyRef gr)
		{
			if(gr.Target != null)
			{
				Parse(gr.Target);
				sb.Write(".");
			}
			sb.Write(gr.PropertyName);
		}
		#endregion
		#region EventRef
		public override void ParseElement(EventRef gr)
		{
			if(gr.Target != null)
			{
				Parse(gr.Target);
				sb.Write(".");
			}
			sb.Write(gr.EventName);
		}
		#endregion
		#region MethodInvokeExpr
		public override void ParseElement(MethodInvokeExpr gr)
		{
			Parse(gr.Target);
			sb.Write("(");
			if(gr.Parameters != null)
			{
				string comma = "";
				foreach(Param o in gr.Parameters)
				{
					sb.Write(comma);
					Parse(o);
					comma = ", ";
				}
			}
			sb.Write(")");
		}
		#endregion
		#region PostfixExpr
		public override void ParseElement(PostfixExpr gr)
		{
			Parse(gr.Left);
			if(gr.Operator == PostfixOperator.Increment)
				sb.Write("++");
			else if(gr.Operator == PostfixOperator.Decrement)
				sb.Write("--");
		}
		#endregion
		#region DelegateInvokeExpr
		public override void ParseElement(DelegateInvokeExpr gr)
		{
			Parse(gr.Target);
			sb.Write("(");
			if(gr.Parameters != null)
			{
				string comma = "";
				foreach(Param o in gr.Parameters)
				{
					sb.Write(comma);
					Parse(o);
					comma = ", ";
				}
			}
			sb.Write(")");
		}
		#endregion
		#region IndexerRef
		public override void ParseElement(IndexerRef gr)
		{
			Parse(gr.Target);
			sb.Write("[");
			if(gr.Indices != null)
			{
				string comma = "";
				foreach(Expression o in gr.Indices)
				{
					sb.Write(comma);
					Parse(o);
					comma = ", ";
				}
			}
			sb.Write("]");
		}
		#endregion
		#region MemberAccess
		public override void ParseElement(MemberAccess gr)
		{
			addSpace = false;
			Parse(gr.Target);
			addSpace = true;
			sb.Write("." + gr.MemberName);
		}
		#endregion
		#region ArrayCreateExpr
		public override void ParseElement(ArrayCreateExpr gr)
		{
			string comma = "";
			sb.Write("new ");
			sb.Write(gr.CreateType.TypeName);
			sb.Write("[");
			for(int i = 0; i < gr.DimensionCount; i++)
			{
				if(gr.Sizes != null && gr.Sizes.Count > i && gr.Sizes[i] != null)
				{	
					sb.Write(comma);
					Parse(gr.Sizes[i]);
					comma = ", ";
				}
				else
				{
					sb.Write(comma);
					comma = ",";
				}

⌨️ 快捷键说明

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