⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fenxitable.cs

📁 实现LL1文法
💻 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 + -