C# 创建一个;编译器";编辑字符串

C# 创建一个;编译器";编辑字符串,c#,string,compiler-construction,C#,String,Compiler Construction,你好,atm,我正在忙着创建一个编译器。这是我转换随机语言的尝试 输入: import System; import System.Collections.Generic; import System.Linq; import System.Text; import System.IO; class Compiler BEGIN; private List : string Strings; function construct() BEGIN; S

你好,atm,我正在忙着创建一个编译器。这是我转换随机语言的尝试

输入:

import System;
import System.Collections.Generic;
import System.Linq;
import System.Text;
import System.IO;

class Compiler
BEGIN;

    private List : string Strings;

    function construct()
    BEGIN;
        Strings = new List : string();
    END;

    function void start ( a : int, b : int, c : int )
    BEGIN;

    END;

END;
输出:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

class Compiler
{

    private List < string Strings;


    {
        Strings = new List < string();
    }

    private void start ( int a,    int b,    int c,    
    {

    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
类编译器
{
私有列表<字符串;
{
Strings=新列表
正如你所看到的,将我的代码编译成c#是一种很有效的方法,除了列表之外,我只是通过编辑字符串来编译代码,我没有教程,只是为了好玩和尝试(请不要看我的编译代码,它只是用我在没有谷歌或任何东西的情况下知道的随机代码制作的),现在我在谷歌上搜索更好的独处,但我还没有找到任何东西

这是我的编译器代码:

public void Compile(String input, String output)
        {
            DirectoryCopy(input, output, true);
            Console.WriteLine("Searching input directory for files.");
            string[] filePaths = Directory.GetFiles(input, "*.upl",SearchOption.AllDirectories);
            Console.WriteLine("Found " + filePaths.Count() + " file(s) In this directory and all sub directorys");
            Console.WriteLine("Start compiling? (Y/N)");
            if (Console.ReadLine().Equals("y"))
            {
                Console.WriteLine("Starting...");
                for (int p = 0; p < filePaths.Length; p++ )
                {
                    String[] lines = File.ReadAllLines(filePaths[p]);
                    for (int i = 0; i < lines.Length; i++)
                    {
                        lines[i] = lines[i].StartsWith("import ") ? lines[i].Replace("import", "using") : lines[i];

                        if (lines[i].Contains("function "))
                        {
                            lines[i] = lines[i].Replace("function", "private");
                            string[] split = lines[i].Split(' ');
                            for (int s = 0; s < split.Length; s++)
                            {
                                if (split[s].Contains(":"))
                                {
                                    if (split[s - 1].Contains("("))
                                    {
                                        if (split[s + 1].Contains(","))
                                        {
                                            string[] split2 = split[s + 1].Split(',');
                                            split[s - 1] = "( " + split2[0] + " " + split[s - 1][1] + ",";
                                            split[s] = string.Empty;
                                            split[s + 1] = split[s + 1].Split(',')[1];
                                        }
                                        else
                                        {
                                            split[s - 1] = "( " + split[s + 1] + " " + split[s - 1][1];
                                            split[s] = string.Empty;
                                            split[s + 1] = string.Empty;
                                        }
                                    }
                                    else if (split[s + 1].Contains(")"))
                                    {
                                        split[s + 1] = split[s + 1].Replace(")", "");
                                        split[s - 1] = split[s + 1] + " " + split[s - 1] + " )";
                                    }
                                    else
                                    {
                                        split[s - 1] = split[s + 1].Replace(",", "") + " " + split[s - 1] + ", ";
                                        split[s] = string.Empty;
                                        split[s + 1] = string.Empty;
                                    }
                                }
                            }
                            split[split.Length - 1] = string.Empty;
                            split[split.Length - 2] = string.Empty;
                            lines[i] = String.Join(" ", split);
                        }

                        if (lines[i].Contains("if") || lines[i].Contains("foreach"))
                        {
                            bool insert = false;
                            for (int i2 = 2; i2 < lines[i].Length; i2++)
                            {
                                if (!char.IsLetter(lines[i][i2]))
                                {
                                    if (insert == false)
                                    {
                                        char[] letters = lines[i].ToCharArray();
                                        letters[i2] = '(';
                                        lines[i] = String.Join("", letters);
                                        insert = true;
                                    }
                                }
                            }
                            lines[i] = !lines[i].EndsWith("BEGIN;") ? lines[i] + ")" : lines[i];
                            lines[i] = lines[i].Contains(":") ? lines[i].Replace(":", "in") : lines[i];
                        }

                        if (lines[i].Contains("Message"))
                        {
                            lines[i] = lines[i].Replace("Message", "MessageBox.Show(");
                            lines[i] = lines[i].Replace(";", " );");
                        }

                        if (lines[i].Contains("List") && lines[i].Contains(":"))
                        {
                            int spaces = 0;
                            char[] letters = lines[i].ToCharArray();
                            for (int c = 0; c < letters.Length; c++)
                            {
                                letters[c] = char.Equals(letters[c], ':') ? '<' : letters[c];
                                if (char.Equals(letters[c], '<'))
                                    break;
                                spaces = char.IsWhiteSpace(letters[c]) ? spaces + 1 : spaces;
                            }
                            lines[i] = String.Join("", letters);
                            string[] spacesArr = lines[i].Split(' ');
                        }

                        lines[i] = lines[i].EndsWith("BEGIN;") || lines[i].StartsWith("BEGIN") ? lines[i].Replace("BEGIN;", "{") : lines[i];
                        lines[i] = lines[i].EndsWith("END;") || lines[i].Contains("END;") ? lines[i].Replace("END;", "}") : lines[i];
                    }
                    double completion = ((double)(p + 1) / (double)filePaths.Length) * 100;
                    Console.WriteLine("Compiled file " + (p + 1) + " of the total " + filePaths.Length + " file(s). (" + (int)completion + "%)");
                    int pathleng2 = output.Split('\\').Count();
                    string[] filepath = filePaths[p].Split('\\');
                    string subPath = String.Join("\\", filepath, pathleng2, (filePaths[p].Split('\\').Count() - input.Split('\\').Count()));
                    subPath = subPath.Replace("upl", "cs");
                    File.WriteAllLines(output + "\\" + subPath, lines);
                }
            }
        }
public void编译(字符串输入,字符串输出)
{
DirectoryCopy(输入、输出、真);
WriteLine(“搜索输入目录中的文件”);
字符串[]filepath=Directory.GetFiles(输入“*.upl”,SearchOption.AllDirectories);
Console.WriteLine(“在此目录和所有子目录中找到“+filepath.Count()+”文件”);
Console.WriteLine(“开始编译?(Y/N)”);
if(Console.ReadLine().Equals(“y”))
{
Console.WriteLine(“开始…”);
for(int p=0;p