String str1=\ int i = 0;
int[] a = new int[10]; while (stack.Count != 0) {
a[i] = stack.Pop(); i++; }
while (i != 0) {
i--;
str1 = str1 + a[i].ToString(); stack.Push(a[i]); }
return str1; }
private void mainControlProgram() {
String s=ACTION(S_Stack.Peek(),In_Stack[0]); int k = 1;
String data1 = k.ToString(), data2 = getStackString(S_Stack), data3 = Sym_Stack, data4 = In_Stack;
String action = \ k++;
while(s!=\ int s1 = getStringInt(ACTION(S_Stack.Peek(), In_Stack[0])); if (ACTION(S_Stack.Peek(), In_Stack[0])==null||ACTION(S_Stack.Peek(), In_Stack[0]).Length == 0) ;
else if (ACTION(S_Stack.Peek(),In_Stack[0])[0]=='s')//ACTION[s,a]为移进 {
action = \\状态\入栈\ S_Stack.Push(s1);//状态入栈
Sym_Stack = Sym_Stack + In_Stack[0];//符号入栈
In_Stack = Reverse(Reverse(In_Stack).Remove(In_Stack.Length - 1));//输入串出栈
}
else if (ACTION(S_Stack.Peek(),In_Stack[0])[0]=='r')//ACTION[s,a]为归约 {
String s_old = \
for (int i = 0; i < Production[s1-1].Production.Length; i++) {
S_Stack.Pop();//状态出栈
s_old = s_old + Sym_Stack[Sym_Stack.Length - Production[s1 -
1].Production.Length+i]; }
int s_top=S_Stack.Peek();
S_Stack.Push(GOTO(s_top,Production[s1-1].Nonterminal));//状态入栈 Sym_Stack = Sym_Stack.Remove(Sym_Stack.Length - Production[s1-1].Production.Length);//符号出栈
Sym_Stack = Sym_Stack + Production[s1-1].Nonterminal;//符号入栈 String s_new = Production[s1 - 1].Nonterminal.ToString();
action = s + \+ s_new + \+ s_old + \归约,\+ \+ s_top.ToString() + \- 1].Nonterminal).ToString()+\入栈\ }
if (k == 1) ; else
addData(data1, data2, data3, data4, action); data1 = k.ToString();
data2 = getStackString(S_Stack); data3 = Sym_Stack; data4 = In_Stack; action = \ k++;
s = ACTION(S_Stack.Peek(), In_Stack[0]); }
addData(data1, data2, data3, data4, \:分析成功 \ }
private void button1_Click(object sender, EventArgs e) {
error = 0;
dataGridView2.Rows.Clear(); InitAction(); InitGoto();
InitProduction(); addActionData(); addGotoData(); InitStack();
mainControlProgram(); } } }
七、实验总结
本次实验通过对LR(1)分析表的构造,实现了LR(1)分析器的设计。通过上次对C#的学
习,本次实验完全采用面向对象的思想对LR(1)分析器进行设计,包括类的构造和函数的封装。本次实验通过测试不同的输入串,程序均完美运行。通过本次实验,更加锻炼了动手编程的能力,和对LR(1)分析法的掌握。
相关推荐: