📄 program.cs
字号:
{
stringArrange[0] = st;
}
else
{
string[] oldA = stringArrange;//刚得到的字符串
int i = oldA.Length + 1;
stringArrange = new string[i];//申请一个长一个的字符数组。
oldA.CopyTo(stringArrange, 0);//将先前的字符数组考到现在这个数组中。
stringArrange[stringArrange.Length - 1] = st;
}
}
/// <summary>
/// 将Text中的字符串,存入一个字符数组中。
/// </summary>
/// <returns></returns>
private char[] textToCharArray()
{
string stringTemp;
stringTemp = this.richTextBox1.Text;
char[] getch = stringTemp.ToCharArray();//要处理的字符都在getch这个数组中。
return getch;
}
/// <summary>
/// 字符数组 到 单词数组
/// </summary>
/// <param name="getch"></param>
/// <returns></returns>
private string[] charArrayToStringArray(char[] getch)//将字符数组转换为字符串数组。即词法分析后的单词数组。
{
string[] stringArrange ={ "" };//用这个字符串数组存放词法分析后得到的单词。
char charTemp;
string stringSave = "";// 存放一个分析得到的单词
//一次循环因得到一个单词。
for (int i = 0; i < getch.Length; i++)
{
charTemp = getch[i];
//由字母开头 数字和字母组成的单词。
if (charTemp >= 'a' &&
charTemp <= 'z'
||
charTemp >= 'A' &&
charTemp <= 'Z')
{
stringSave = charTemp.ToString();
i = i + 1;
int test = 0;//判断循环是否结束,1 为结束。
while (test == 0)
{
charTemp = getch[i];
if (charTemp >= 'a' &&
charTemp <= 'z'
||
charTemp >= 'A' &&
charTemp <= 'Z'
||
charTemp >= '0' &&
charTemp <= '9')
{
stringSave = stringSave + charTemp.ToString();
i = i + 1;
}
else
test = 1;
}
stringToArrayString(ref stringArrange, stringSave);
}
stringSave = "";
//由数字组成的单词。
if (charTemp >= '0' &&
charTemp <= '9')
{
stringSave = stringSave + charTemp.ToString();
i = i + 1;
int test1 = 0;
while (test1 == 0)
{
charTemp = getch[i];
if (charTemp >= '0' &&
charTemp <= '9')
{
stringSave = stringSave + charTemp.ToString();
i = i + 1;
}
else
test1 = 1;
}
stringToArrayString(ref stringArrange, stringSave);
}
stringSave = "";
//由运算符组成的单词。
if (charTemp == '+'
|| charTemp == '-'
|| charTemp == '*'
|| charTemp == '/'
|| charTemp == ':'
|| charTemp == '='
|| charTemp == '?'
|| charTemp == '$'
|| charTemp == '<'
|| charTemp == '>'
|| charTemp == '!')
{
stringSave = stringSave + charTemp.ToString();
i = i + 1;
int test2 = 0;
while (test2 == 0)
{
charTemp = getch[i];
if (charTemp == '+'
|| charTemp == '-'
|| charTemp == '*'
|| charTemp == '/'
|| charTemp == '='
|| charTemp == '<'
|| charTemp == '>'
|| charTemp == '!')
{
stringSave = stringSave + charTemp.ToString();
i = i + 1;
}
else
test2 = 1;
}
stringToArrayString(ref stringArrange, stringSave);
}
stringSave = "";
//由分界符组成的单词。
if (charTemp == '('
|| charTemp == ')'
|| charTemp == '{'
|| charTemp == '}'
|| charTemp == '['
|| charTemp == ']'
|| charTemp == ','
|| charTemp == ':'
|| charTemp == ';'
|| charTemp == '"'
|| charTemp == '\''
|| charTemp == '\\')
{
stringSave = stringSave + charTemp.ToString();
stringToArrayString(ref stringArrange, stringSave);
}
}
return stringArrange;
}
/// <summary>
/// 单词数组 到 二维单词数组。
/// </summary>
/// <param name="stringArray"></param>
/// <returns></returns>
private string[,] stringArrayToTwoStringArray(string[] stringArray)
{
//存放单词标识后的结果。
string[,] twoArray = new string[2, 1];
//单词的标志
int j = 0;
//每循环一次,把一个单词归于一类,即前面加上一个数字。
for (int i = 0; i < stringArray.Length; i++)
{
//Keyword
if (stringArray[i] == "INT"
|| stringArray[i] == "int"
|| stringArray[i] == "IF"
|| stringArray[i] == "if"
|| stringArray[i] == "THEN"
|| stringArray[i] == "then"
|| stringArray[i] == "while"
|| stringArray[i] == "WHILE"
|| stringArray[i] == "do"
|| stringArray[i] == "DO"
|| stringArray[i] == "else"
|| stringArray[i] == "ELSE")
{
twoArray[0, j] = "Keyword";
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
//Operator
else
if (stringArray[i] == "+"
|| stringArray[i] == "-"
|| stringArray[i] == "*"
|| stringArray[i] == "/"
|| stringArray[i] == ">"
|| stringArray[i] == "<"
|| stringArray[i] == ">="
|| stringArray[i] == "<="
|| stringArray[i] == "!="
|| stringArray[i] == "++"
|| stringArray[i] == "--"
|| stringArray[i] == ":=")
{
twoArray[0, j] = "Operator";
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
//Separator
else
if (stringArray[i] == "("
|| stringArray[i] == ")"
|| stringArray[i] == "{"
|| stringArray[i] == "}"
|| stringArray[i] == "["
|| stringArray[i] == "]"
|| stringArray[i] == ","
|| stringArray[i] == ";"
|| stringArray[i] == "\""
|| stringArray[i] == "/*"
|| stringArray[i] == "*/")
{
twoArray[0, j] = "Separator";
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
//Digit
else
if (stringArray[i].ToCharArray()[0] >= '0' &&
stringArray[i].ToCharArray()[0] <= '9')
{
twoArray[0, j] = "Digit";
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
//Identifier
else
if (stringArray[i].ToCharArray()[0] >= 'a' &&
stringArray[i].ToCharArray()[0] <= 'z'||
stringArray[i].ToCharArray()[0] >= 'A' &&
stringArray[i].ToCharArray()[0] <= 'Z')
{
twoArray[0, j] = "Identifier";
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
// Error
else
{
twoArray[0, j] = "Error";
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
}
return twoArray;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -