📄 form1.cs
字号:
charTemp = getch[i];
if (charTemp == '\n')
{
//stringSave = stringSave + charTemp.ToString();
//col++;
col=0;
row++;
//i = i + 1;
test = 1;
}
else
{
i = i + 1;
col++;
}
}
}
else
i = i - 1;
//stringToArrayString(ref stringArrange, stringSave);
if(charTemp == '*')//由/*,*/括起的注释语句
{
//判断循环是否结束,1 为结束。
col++;
while (test == 0&&i<getch.Length -1)
{
i = i + 1;
col++;
charTemp = getch[i];
if(charTemp == '*')
{
i = i + 1;
col++;
charTemp = getch[i];
if(charTemp == '/')
{
test = 1;
i++;
}
}
if(charTemp == '\n')
{
col = 0;
row++;
}
}
}
}
//stringSave = "";
//由界符(:,,,',",;,(,),.)组成的单词。
if (charTemp == ':'
||
charTemp == ','
||
charTemp == '\''
||
charTemp == '"'
||
charTemp == ';'
||
charTemp == '('
||
charTemp == ')'
||
charTemp == '.')
{
col++;
stringSave.word =charTemp.ToString();
stringSave.col = col;
stringSave.row = row;
stringToArrayString(ref stringArrange,stringSave);
}
zero(stringSave);
//由运算符(+,-,*,/)组成的单词。
charTemp = getch[i];
if (charTemp == '+'
||
charTemp == '-'
||
charTemp == '*'
||
charTemp == '/'
||
charTemp == '=')
{
col++;
stringSave.word = charTemp.ToString();
stringSave.col = col;
stringSave.row = row;
stringToArrayString(ref stringArrange,stringSave);
}
zero(stringSave);
}
///////////////////////////////////////////////////////////////////////////
/*
DataTable dt = new DataTable();
dt.Columns.Add("错误提示",System.Type.GetType("System.String"));
dt.Columns.Add("错误单词",System.Type.GetType("System.String"));
dt.Columns.Add("行",System.Type.GetType("System.String"));
dt.Columns.Add("列",System.Type.GetType("System.String"));
for(int k=1;k<errors.Length;k++)
{
System.Data.DataRow dr=dt.NewRow();
dr["错误提示"]=errors[k].type;
dr["错误单词"]=errors[k].word;
dr["行"]=errors[k].row;
dr["列"]=errors[k].col;
dt.Rows.Add(dr);
}
this.dataGrid_error.SetDataBinding(dt,"");
dataGrid_error.ForeColor=System.Drawing.Color.Red;
*/
///////////////////////////////////////////////////////////////////////////
return stringArrange;
//return stringArrange[];
}
#endregion
//
#region 错误处理
private words[] stringArrayToError(char[] getch)
{
words[] errors = new words[1];
char charTemp;
words stringSave = new words();//存放一个分析得到的单词
zero(stringSave);
int ipos = 0;
int col = 0;//记录行数
int row = 1;
int count1 = 0;
int count2 = 0;
//一次循环因得到一个单词
for (int i = 0; i < getch.Length; i++)
{
charTemp = getch[i];
if (charTemp == '\n')
{
col = 0;
row++;
}
//由数字开头的字母数字组成的错误单词。
if (charTemp >= '0' && charTemp <= '9')
{
col++;
i = i + 1;
charTemp=getch[i];
int test = 0;//判断循环是否结束,1为结束
if (charTemp >= 'a'&& charTemp <= 'z'|| charTemp >= 'A'&& charTemp <= 'Z')
{
stringSave.word = getch[i-1].ToString();
stringSave.col = col;
stringSave.row = row;
stringSave.type = "非法字符:变量必须为以字母开头的字母或字母数字组合!";
col++;
stringSave.word =stringSave.word + charTemp.ToString();
i++;
while (test == 0)
{
charTemp = getch[i];
if (charTemp >= 'a' && charTemp <= 'z'|| charTemp >= 'A' && charTemp <= 'Z')
{
col++;
stringSave.word = stringSave.word + charTemp.ToString();
i = i + 1;
}
else
{
test = 1;
}
if(charTemp == '\n' )
row++;
}
stringToErrorsArrayString(ref errors, stringSave);
}
else
{
i = i - 1;
col --;
}
zero(stringSave);//置空
}
//不成对的双引号
else
if (getch[i] == '"')
{
int flag = 1;
int test = 0;
count1++;
col++;
stringSave.word =charTemp.ToString();
stringSave.col = col;
stringSave.row = row;
stringSave.type = "不正确的字符串表达:双引号不成对!";
ipos = i;
i++;
while (test == 0 && i<getch.Length)
{
charTemp = getch[i];
if(charTemp!='"')
{
//stringSave.word = stringSave.word + charTemp.ToString();
i++;
}
else
{
//flag = 0;
test = 1;
}
}
if (i == getch.Length)
flag = 0;
if(flag==0&&count1%2!=0)
stringToErrorsArrayString(ref errors, stringSave);
zero(stringSave);
i = ipos;
}
//不成对的单引号
//charTemp = getch[i];
else
if (getch[i] == '\'')
{
int flag = 0;
int test = 0;
count2++;
col++;
stringSave.word =charTemp.ToString();
stringSave.col = col;
stringSave.row = row;
stringSave.type = "不正确的字符表达:单引号不成对!";
i++;
ipos = i;
while (test == 0 && i<getch.Length)
{
charTemp = getch[i];
if(charTemp!='\'')
{
//stringSave.word = stringSave.word + charTemp.ToString();
i++;
}
else
{
flag = 1;
test = 1;
}
}
if (flag == 0&&count2%2!=0)
stringToErrorsArrayString(ref errors, stringSave);
zero(stringSave);
i = ipos;
}
//不成对的括号
//charTemp = getch[i];
else
if (getch[i] == '(')
{
int flag = 0;
int test = 0;
col++;
stringSave.word =charTemp.ToString();
stringSave.col = col;
stringSave.row = row;
stringSave.type = "缺少括号:括号不成对!";
i++;
ipos = i;
while (test == 0 && i<getch.Length)
{
charTemp = getch[i];
if(charTemp!=')')
{
//stringSave.word = stringSave.word + charTemp.ToString();
i++;
}
else
{
flag = 1;
test = 1;
}
}
if (flag == 0)
stringToErrorsArrayString(ref errors, stringSave);
zero(stringSave);
i = ipos;
}
//注释丢失
else
if (getch[i] == '/')
{
col++;
i = i + 1;
ipos = i;
int flag=1;
stringSave.word =charTemp.ToString();
stringSave.col = col;
stringSave.row = row;
stringSave.type = "注释丢失!";
int test = 0;
charTemp = getch[i];//提前判断下一字符,如果为‘/’,则该行为注释语句
if(charTemp == '*')//由/*,*/括起的注释语句
{
//判断循环是否结束,1 为结束。
stringSave.word = stringSave.word +charTemp.ToString();
col++;
while (test == 0&&i<getch.Length-1)
{
i = i + 1;
col++;
charTemp = getch[i];
if(charTemp == '*')
{
i = i + 1;
col++;
charTemp = getch[i];
if(charTemp == '/')
{
test = 1;
}
}
}
}
if(i==getch.Length-1)
flag=0;
if(flag==0)
stringToErrorsArrayString(ref errors, stringSave);
zero(stringSave);
i = ipos;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -