📄 fenxitable.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
namespace LL1
{
class FenxiTable
{
private int Row;
private int Col;
private char[] Terminal;
private char[] NonTerminal;
private Wenfa[,] Table;
public FenxiTable(char[] Ter,char[] NonTer)
{
Row = charlength(NonTer);
Col =charlength(Ter);
Terminal = Ter;
NonTerminal = NonTer;
Table=new Wenfa [Row,Col];
for (int i = 0; i < Row; i++)
{
for (int j = 0; j < Col; j++)
{
Table[i,j] = new Wenfa();
}
}
}
public bool Add(char ch,Wenfa wf)
{
int i = 0;
for (; i < Row; i++)
{
if (NonTerminal[i] == wf.Wenfa_Left)
{
for (int j = 0; j < Col; j++)
{
if (Terminal[j] == ch)
{
if (Table[i, j].Wenfa_Left != '\0')
{
return false;
}
else
{
Table[i, j] = wf;
return true;
}
break;
}
}
break;
}
}
if (i == Row)
{
return false;
}
return true;
}
public Wenfa Get(char Nch,char Tch)
{
int i = 0;
int j = 0;
for (; i < Row; i++)
{
if (NonTerminal[i] == Nch)
{
for (; j < Col;j++)
{
if (Terminal[j] == Tch)
{
return Table[i,j];
}
}
break;
}
}
return Table[i, j];
}
public bool IsEmpty(char Nchar,char Tchar)
{
for (int i = 0; i < Row; i++)
{
if (NonTerminal[i] == Nchar)
{
for (int j = 0; j < Col; j++)
{
if (Terminal[j] == Tchar)
{
if (Table[i,j].Wenfa_Left == '\0')
{
return true;
}
else
{
return false;
}
break;
}
}
break;
}
}
return false;
}
public int charlength(char[] a)
{
int i = 0;
for (; i < a.Length; i++)
{
if (a[i] == '\0')
{
break;
}
}
return i;
}
public void Output()
{
Console.WriteLine("\n\n LL1文法的预测分析表如下:");
Console.Write(" ━━━┯");
for (int i0 = 0; i0 < charlength(Terminal); i0++)
{
Console.Write("━━━━━");
}
Console.Write("\n 非终│ 输入字符 ");
Console.Write("\n ┝");
for (int i0 = 0; i0 < charlength(Terminal); i0++)
{
Console.Write("━━━━━");
}
Console.Write("\n 结符│");
for (int i0 = 0; i0 < Col; i0++)
{
Console.Write(" " + Terminal[i0] + " \t");
}
Console.Write("\n ━━━┿");
for (int i0 = 0; i0 < charlength(Terminal); i0++)
{
Console.Write("━━━━━");
}
for (int i = 0; i < Row;i++ )
{
Console.Write("\n " + NonTerminal[i] + " │");
for (int j = 0; j < Col; j++)
{
if (!IsEmpty(NonTerminal[i], Terminal[j]))
{
Console.Write(Table[i, j].Wenfa_Left + "->");
for (int ii = 0; ii < charlength(Table[i, j].Wenfa_Right); ii++)
{
Console.Write(Table[i,j].Wenfa_Right[ii]);
}
Console.Write("\t");
}
else
{
Console.Write(" --\t");
}
}
}
Console.Write("\n ━━━┷");
for (int i0 = 0; i0 < charlength(Terminal); i0++)
{
Console.Write("━━━━━");
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -