moodlee 发表于 2016-5-25 22:15

【原创源码】C#编写一款自己的脚本语言.第十九章.下



第十九章.下天上的明月,地上的清风,都叫人起思念。
这个世界其实很简单:
帅的遇到漂亮的,有钱的遇到帅的,有权势的遇到漂亮的....
美好的总会遇到美好的,其他的丑拒。
所以,尚且停下你的思念,去听一听这个世界想要说的。
——————————这一步,我们实现上一章说的:找出集合
——————————下面是代码:
namespace ScriptCode_Set
{
    public class USet
    {
      /*
      该类实现一个功能:
      查找出所有的类(顶级类,不包含子类)
      */
      public List<UClass> Main(string myOri)
      {
            List<UClass> myResult = new List<UClass>();
            //-----------------------------------
            int NoteOfBracket = 0;//括号的标记,遇到{就+1,遇到}就-1
            string Content = string.Empty;//类包含的内容
            string Note = string.Empty;//类的标记
            UClass Class = new UClass();
            //-----------------------------------
            /*下面开始一个一个分析char*/
            for(int i=0;i<myOri.Length; i++)
            {
                if (myOri == ';')//如果当前char是;
                {
                  if(NoteOfBracket == 0)//表示当前字符在类外
                  {
                        Note = string.Empty;//重置标记
                  }else//表示在类内
                  {
                        Content += myOri;
                  }

                }else if (myOri == '{')//如果当前字符为{
                {
                  NoteOfBracket++;//标记自增
                  if(NoteOfBracket == 1)//表示顶级类的开始
                  {
                        Class.Name = Note;//把标记赋值给类的名称
                  }else//表示在顶级类内部
                  {
                        Content += myOri;
                  }
                }else if (myOri == '}')
                {
                  NoteOfBracket--;//标记自减
                  if(NoteOfBracket == 0)//顶级类结束
                  {
                        Class.Content = Content;
                        myResult.Add(Class);
                        Class = new UClass();
                        Note = string.Empty;
                        Content = string.Empty;
                  }else//表示在顶级类内部
                  {
                        Content += myOri;
                  }
                }else//如果是其他字符
                {
                  if(NoteOfBracket == 0)//表示在类外
                  {
                        Note += myOri;
                  }else//表示在类内
                  {
                        Content += myOri;
                  }
                }
            }

            //-----------------------------------
            return myResult;
      }
    }
    /*下面是需要用到的类*/
    /*很简单,只是为了方便返回*/
    public class UClass
    {
      /*
      它有两个属性:
      1、名称
      2、内容
      */
      private string _Name;
      public string Name
      {
            get
            {
                return _Name;
            }
            set
            {
                _Name = value;
            }
      }

      private string _Content;
      public string Content
      {
            get
            {
                return _Content;
            }
            set
            {
                _Content = value;
            }
      }
    }
}
——————————下面是测试图:
测试图中涉及的代码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ScriptCode_Set;
using Class = ScriptCode_Set.UClass;

namespace Test
{
    public partial class TestForm : Form
    {
      public TestForm()
      {
            InitializeComponent();
      }
      List<Class> Classes = new List<Class>();
      private void B_ToProcessed_Click(object sender, EventArgs e)
      {
            USet Set = new USet();
            Classes = Set.Main (tBox_Ori .Text);
            lBox.Items.Clear();
            for(int i = 0; i < Classes.Count; i++)
            {
                lBox.Items.Add(Classes.Name);
            }
      }

      private void lBox_Click(object sender, EventArgs e)
      {
            if(lBox .SelectedIndex > -1)
            {
                tBox_Name.Text = Classes.Name;
                tBox_Content .Text = Classes.Content;
            }
      }
    }
}
——————————与自己促膝长谈,听一听你想要的。

moodlee 发表于 2016-5-25 22:16

附上之前章节地址:

第一章:http://www.52pojie.cn/thread-470085-1-1.html
第二章:http://www.52pojie.cn/thread-470424-1-2.html
第三章:http://www.52pojie.cn/thread-471306-1-1.html
第四章:http://www.52pojie.cn/thread-471637-1-1.html
第五章:http://www.52pojie.cn/thread-471937-1-1.html
第六章:http://www.52pojie.cn/thread-472899-1-1.html
第六章.下:http://www.52pojie.cn/thread-473861-1-1.html
第七章:http://www.52pojie.cn/thread-476054-1-1.html
第八章:http://www.52pojie.cn/thread-478357-1-1.html
第八章.下:http://www.52pojie.cn/thread-478971-1-1.html
第九章:http://www.52pojie.cn/thread-481291-1-1.html
第十章:http://www.52pojie.cn/thread-482243-1-1.html
第十一章:http://www.52pojie.cn/thread-483382-1-1.html
第十二章:http://www.52pojie.cn/thread-484707-1-1.html
第十三章:http://www.52pojie.cn/thread-486262-1-1.html
第十四章:http://www.52pojie.cn/thread-488239-1-1.html
第十五章:http://www.52pojie.cn/thread-490649-1-1.html
第十六章:http://www.52pojie.cn/thread-495034-1-1.html
第十七章:http://www.52pojie.cn/thread-497199-1-1.html
第十八章:http://www.52pojie.cn/thread-499323-1-1.html
第十九章:http://www.52pojie.cn/thread-500216-1-1.html

感谢支持!

app2015111 发表于 2016-5-25 22:21

6666我要学C#

lonely_coder 发表于 2016-5-25 22:57

你这不是在写C#,你是在诉说情怀啊。。:loveliness:,支持一下~~

小黑赖了 发表于 2016-5-25 23:40

不错,aspaspasp666666666666666

tangheng 发表于 2016-5-26 19:39

楼主大神,一直都在关注
页: [1]
查看完整版本: 【原创源码】C#编写一款自己的脚本语言.第十九章.下