制作一个简单的词法分析器
try{
string a;
StreamReader st = new StreamReader(openFileDialog1.FileName, Encoding.Default);
listBox1.Items.Clear();
while (st.Peek() >= 0)
{
int Count=0;
int ch = st.Read();
while(true)
{
while (ch == ' ' || ch == 10 || ch == 9)
{
ch = st.Read();
}
if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')
{
a = null;
do
{
Count++;
a += (char)ch;
ch = st.Read();
} while (ch >= 'a' && ch <= 'z' || ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z');
if (a == "if")
{
listBox1.Items.Add("(ifsym, if)\n");
}
else if (a == "else")
{
listBox1.Items.Add("(elsesym, else)\n");
}
else if (a == "int")
{
listBox1.Items.Add("(intsym, int)\n");
}
else if (a == "for")
{
listBox1.Items.Add("(forsym, for)\n");
}
else if (a == "return")
{
listBox1.Items.Add("(returnsym, return)\n");
}
else if (a == "void")
{
listBox1.Items.Add("(voidsym, void)\n");
}
else if (a == "while")
{
listBox1.Items.Add("(whilesym, while)\n");
}
else if (a == "char")
{
listBox1.Items.Add("(charsym, char)\n");
}
else if (a == "const")
{
listBox1.Items.Add("(constsym, const)\n");
}
else if (a == "case")
{
listBox1.Items.Add("(casesym, case)\n");
}
else if (a == "float")
{
listBox1.Items.Add("(floatsym, float)\n");
}
else if (a == "do")
{
listBox1.Items.Add("(Tosym, to)\n");
}
else if (a == "break")
{
listBox1.Items.Add("(breaksym, break)\n");
}
else if (a == "static")
{
listBox1.Items.Add("(staticsym, static)\n");
}
else if (a == "continue")
{
listBox1.Items.Add("(continuesym, continue)\n");
}
else if (Count > 10)
{
string str = "(标识符定义有错误!, " + a + ")";
listBox1.Items.Add(str + "\n");
}
else
{
string ss = "(ident," + a + ")";
listBox1.Items.Add(ss + "\n");
}
}
if (ch >= '0' && ch <= '9')
{
do
{
ch = st.Read();
} while (ch >= '0' && ch <= '9');
if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')
{
listBox1.Items.Add("数据定义有错误!");
}
else
{
listBox1.Items.Add("(number, )\n");
}
}
if (ch == '=')
{
ch = st.Read();
if (ch == '=')
{
listBox1.Items.Add("(eql, )\n");
ch = st.Read();
}
else
{
listBox1.Items.Add("(becomes, )\n");
}
}
if (ch == '>')
{
ch = st.Read();
if (ch == '=')
{
listBox1.Items.Add("(geq)\n");
ch = st.Read();
}
else
{
listBox1.Items.Add("(gtr, )\n");
}
}
if (ch == '<')
{
ch = st.Read();
if (ch == '=')
{
listBox1.Items.Add("(leq, )\n");
ch = st.Read();
}
else
{
listBox1.Items.Add("(lss, )\n");
}
}
if (ch == ';')
{
listBox1.Items.Add("(semicolon, )\n");
break;
}
if (ch == '+')
{
listBox1.Items.Add("(plus, )\n");
ch = st.Read();
}
if (ch == '-')
{
listBox1.Items.Add("(minus, )\n");
ch = st.Read();
}
if (ch == '*')
{
listBox1.Items.Add("(times, )\n");
ch = st.Read();
}
if (ch == '/')
{
listBox1.Items.Add("(slash, )\n");
ch = st.Read();
}
if (ch == '(')
{
listBox1.Items.Add("(lparen, )\n");
ch = st.Read();
}
if (ch == ')')
{
listBox1.Items.Add("(rparen, )\n");
ch = st.Read();
}
if (ch == '{')
{
listBox1.Items.Add("(lbparen, )\n");
ch = st.Read();
}
if (ch == '}')
{
listBox1.Items.Add("(rbparen, )\n");
ch = st.Read();
}
if (ch == ',')
{
listBox1.Items.Add("(comma, )");
ch = st.Read();
}
if (ch == '.')
{
listBox1.Items.Add("(period, )");
ch = st.Read();
}
}
}
st.Close();
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
这个程序卡住了,运行不了,请高手帮忙一下,看看哪里出现了问题。