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