Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扫描、解析_C#_Compiler Construction - Fatal编程技术网

C# 扫描、解析

C# 扫描、解析,c#,compiler-construction,C#,Compiler Construction,我正在编写简单的编译器,而不使用语法生成器。 . 我编写了读取file.txt的扫描代码,并将其分类为标识符或反转单词、数字、变量等。 我得到了我想要的结果,但是有没有可能用这段代码来完成我的意思是应用语法分析?解析呢。因为我试着用java编写,但我用了错误的方式编码。我想看看我是否做对了,特别是我不擅长C#coding 阵列: string[] Rw = new string[8]; Rw[0] = "for"; Rw[1] = "while";

我正在编写简单的编译器,而不使用语法生成器。 . 我编写了读取file.txt的扫描代码,并将其分类为标识符或反转单词、数字、变量等。
我得到了我想要的结果,但是有没有可能用这段代码来完成我的意思是应用语法分析?解析呢。因为我试着用java编写,但我用了错误的方式编码。我想看看我是否做对了,特别是我不擅长C#coding

阵列:

 string[] Rw = new string[8];
        Rw[0] = "for";
        Rw[1] = "while";
        Rw[2] = "end";
        Rw[3] = "contiune";
        Rw[4] = "if";
        Rw[5] = "break";
        Rw[6] = "do";
        Rw[7] = "return";
        string[] id = new string[6];
        id[0] = "int";
        id[1] = "float";
        id[2] = "string";
        id[3] = "double";
        id[4] = "bool";
        id[5] = "char";
        string[] op = new string[6];
        op[0] = "+";
        op[1] = "-";
        op[2] = "/";
        op[3] = "*";
        op[4] = "%";
        string[] Num = new string[10];
        Num[0] = "0";
        Num[1] = "1";
        Num[2] = "2";
        Num[3] = "3";
        Num[4] = "4";
        Num[5] = "5";
        Num[6] = "6";
        Num[7] = "7";
        Num[8] = "8";
        Num[9] = "9";

        string[] var = new string[17];
     var[0] = "a";
     var[1] = "b";
     var[2] = "A";
     var[3] = "B";
     var[4] = "C";
     var[5] = "d";
     var[6] = "D";
     var[7] = "X";
     var[8] = "x";
     var[9] = "Y";
     var[10] = "y";
     var[11] = "z";
     var[12] = "Z";
     var[13] = "v";
     var[14] = "V";
     var[15] = "f";
     var[16] = "F";
读取和拆分:

        char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
        using (System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\caza\Desktop\1.txt"))
    {
        while ((line = file.ReadLine()) != null)
        {


            string[] token = line.Split(delimiterChars);


            foreach (string s in token)
            {
             // Console.WriteLine(s);
                foreach (string z in Rw)
                {
                    if (s == z)
                    {

                        Console.WriteLine(s + " is a Reserved Word ");

                    }

                }
                foreach (string y in id)
                {
                    if (s == y)
                    {
                        Console.WriteLine(s + " is a identifier ");

                    }
                }
                    foreach (string o in op)
                    {
                        if (s == o)
                        {
                            Console.WriteLine(s + " is a Operation ");
                        }
                    }

                    foreach (string n in Num)
                    {
                        if (s == n)
                        {
                            Console.WriteLine(s + " is  a Number ");
                        }
                    }
                    foreach (string v in var)
                    {
                        if (s == v)
                        {



                            Console.WriteLine(s + " is a Variable");
                        }
                    }
            }


            }
        }

        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}

不确定问题是什么。我把代币分开比较好。现在可以应用语法分析了。例如:我说标识符后面应该跟变量,变量后面应该跟,如果错误,我将返回错误。如果您想解析文本并检查它是否应用了所有规则,并且没有语法错误,这是肯定的!您应该像解析树一样解析数据结构中的标记。@saeed我是否可以在C#中通过编码而不是语法来生成解析树?我知道解析树来自语法,但我绘制了父树和子树。我不知道这些字符串数组是否可行。