亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? guiyue.txt

?? 找可規約串進行規約
?? TXT
字號:
using System;
using System.Collections.Generic;
using System.Text;

namespace 編譯實驗3
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] expression ={ "E->E+T|T", "T->T*F|F", "F->(E)|i" };
            bool[,] FirstVT = new bool[3, 5];
            bool[,] LastVT = new bool[3, 5];
            Stack<string> stack = new Stack<string>();
            string[] noendArry ={"E","T","F"};
            string[]  endArry={ "+", "*", "(", ")", "i" ,"#"};
            List<string> end = new List<string>(endArry);
            List<string> noend = new List<string>(noendArry);
            char[,] table = new char[6, 6];
           //求firstvt的集合
            for (int i = 0; i < FirstVT .GetLength (0); i++)
            {
                for (int j = 0; j < FirstVT .GetLength (1); j++)
                {
                    FirstVT[i, j] = false;
                }
            }
            for (int i = 0; i < expression .Length; i++)
            {
               //確定產生式的第一個字母是否為終結符
                int index=end.IndexOf(expression[i][3].ToString ());
                if (index!=-1&& FirstVT[i, index] ==false)
                {
                        stack.Push( noend[i]+expression[i][3]);
                        FirstVT[i, index] = true;
                }
                //確定產生式第一個字母為非終結符,第二個字母為終結符
                int index1=noend.IndexOf(expression[i][3].ToString ());
                int index2=end.IndexOf(expression[i][4].ToString ());
                if (index1 != -1 && index2 != -1 && FirstVT[i, index2] == false)
                {
                    stack.Push(noend[i] + expression[i][4]);
                    FirstVT[i, index2] = true;
                }
                //確定產生式的第二個表達式的第一個字母是否為終結符
                int index3 = end.IndexOf(expression[i][7].ToString ());
                if (index3 != -1 && FirstVT[i, index3] == false)
                {
                    stack.Push(noend[i] + expression[i][7]);
                    FirstVT[i, index3] = true;
                }
            }
            while (stack.Count != 0)
            {
                string element = stack.Pop();
                for (int i = 0; i < expression .Length; i++)
                {
                    if (expression[i][3] == element[0]&&FirstVT[i,end.IndexOf (element[1].ToString ())]==false)
                    {
                        stack.Push(noend[i] + element[1]);
                        FirstVT[i, end.IndexOf(element[1].ToString())] = true;
                    }
                    if (expression[i][7] == element[0] && FirstVT[i, end.IndexOf(element[1].ToString())] == false)
                    {
                        stack.Push(noend[i] + element[1]);
                        FirstVT[i, end.IndexOf(element[1].ToString())] = true;
                    }
                }
            }
            //打印FirstVT集合
            Console.WriteLine("FirstVT集為:");
            for (int i = 0; i < FirstVT .GetLength (0); i++)
            {
                for (int j = 0; j< FirstVT .GetLength (1); j++)
                {
                    Console.Write(FirstVT[i,j]+" ");
                }
                Console.WriteLine();
            }
          //求Lastvt的集合
            for (int i = 0; i < LastVT.GetLength(0); i++)
            {
                for (int j = 0; j <LastVT.GetLength(1); j++)
                {
                   LastVT[i, j] = false;
                }
            }
            for (int i = 0; i < expression.Length; i++)
            {
                //確定產生式的倒數第一個字母是否為終結符
                int index = end.IndexOf(expression[i][4].ToString());
                if (index != -1 && LastVT[i, index] == false)
                {
                    stack.Push(noend[i] + expression[i][4]);
                    LastVT[i, index] = true;
                }
                //確定產生式的倒數第一個字母為非終結符,倒數第二個字母為終結符
                int index1 = noend.IndexOf(expression[i][4].ToString());
                int index2 = end.IndexOf(expression[i][5].ToString());
                if (index1 != -1 && index2 != -1 && LastVT[i, index2] == false)
                {
                    stack.Push(noend[i] + expression[i][5]);
                    LastVT[i, index2] = true;
                }
                //確定產生式的第二個表達式的倒數第一個字母是否為終結符
                int index3 = end.IndexOf(expression[i][7].ToString());
                if (index3 != -1 && LastVT[i, index3] == false)
                {
                    stack.Push(noend[i] + expression[i][7]);
                    LastVT[i, index3] = true;
                }
            }

            while (stack.Count != 0)
            {
                string element = stack.Pop();
                for (int i = 0; i < expression.Length; i++)
                {
                    if (expression[i][5] == element[0] && LastVT[i, end.IndexOf(element[1].ToString())] == false)
                    {
                        stack.Push(noend[i] + element[1]);
                        LastVT[i, end.IndexOf(element[1].ToString())] = true;
                    }
                    if (expression[i][7] == element[0] && LastVT[i, end.IndexOf(element[1].ToString())] == false)
                    {
                        stack.Push(noend[i] + element[1]);
                        LastVT[i, end.IndexOf(element[1].ToString())] = true;
                    }
                }
            }
            Console.WriteLine();
            //打印LastVT集合
            Console.WriteLine("LastVT集為:");
            for (int i = 0; i < LastVT.GetLength(0); i++)
            {
                for (int j = 0; j < LastVT.GetLength(1); j++)
                {
                    Console.Write(LastVT[i, j] + " ");
                }
                Console.WriteLine();
            }
            //求算符優先表
            for (int i = 0; i < expression .Length ; i++)
            {
                for (int j = 3 ; j < expression [i].Length -3; j++)
                {
                    int index3;
                    int index = end.IndexOf(expression[i][j].ToString ());
                    int index4 = noend.IndexOf(expression[i][j].ToString ());
                    int index1 = end.IndexOf(expression[i][j + 1].ToString ());
                    int index2 = noend.IndexOf(expression[i][j + 1].ToString ());
                    if (index == -1 && index1 == -1)
                    {
                        table[index,index1] = '=';
                    }
                    if (j <= expression[i].Length - 4 &&(index3= end.IndexOf(expression[i][j + 2].ToString ()))!=-1&&index!=-1)
                    {
                        if (index2 != -1)
                        {
                            table[index,index3] = '=';
                        }
                    }
                    if (index != -1 && index2 != -1)
                    {
                        for (int k = 0; k < 5; k++)
                        {
                            if (FirstVT[index2,k] == true)
                            {
                                table[index,k] = '<';
                            }
                        }
                    }
                    if (index4 != -1 && index1 != -1)
                    {
                        for (int k = 0; k < 5; k++)
                        {
                            if (LastVT[index4, k] == true)
                            {
                                table[k, index1] = '>';
                            }
                        }
                    }

                }
            }
            for (int i = 0; i <5; i++)
            {
                if (FirstVT[0, i] == true)
                {
                    table[5,i] = '<';
                }
                if (LastVT[0, i] == true)
                {
                    table[i, 5] = '>';
                }
            }
            table[5, 5] = '=';
            //打印算符優先表
            Console.WriteLine();
            Console.WriteLine("算符優先表為:");
            Console.Write("  ");
            for (int i = 0; i < end.Count; i++)
            {
                Console.Write(end[i]+" ");
            }
            Console.WriteLine();
            for (int i = 0; i < table.GetLength(0); i++)
            {
                Console.Write(end[i]+" ");
                for (int j = 0; j < table.GetLength (1); j++)
                {
                    Console.Write(table[i,j]+" ");
                }
                Console.WriteLine();
            }
            Console.WriteLine("請輸入要規約的句子以#結尾:");
            string sentence = Console.ReadLine();
            int top = 1;
            int h,next=0;
            char a;
            char[] s = new char[20];
            s[0]=' ';
            s[1] = '#';
            Console.WriteLine(s[1]);
            do
            {
                a = sentence[next];
                h = top;
                //bool yes1;
                int index0=-1;
                int index=end.IndexOf(s[top].ToString());
                int index1=end.IndexOf(a.ToString());
                bool yes=(table[index,index1]=='>');
            //找到了可規約串
                while(yes)
                {
                    //尋找可規約串
                    //do
                    //{
                    //    char q=s[h];
                    //    int index2=end.IndexOf(s[h-1].ToString());
                    //    if(index2!=-1)
                    //    {
                    //        h=h-1;
                    //    }
                    //    else
                    //    {
                    //        h=h-2;
                    //    }
                    //    int index11 = end.IndexOf(s[h].ToString());
                    //   // if (index != -1 && index11 != -1)
                    //    //{
                    //        yes1 = (table[index11, index] == '<');
                    //   // }
                    //   // else
                    //   // {
                    //    //    yes1 = (table[index0, index11] == '>');
                    //   // }
                    //}
                    //while(!yes1);
                  //  int j = h;
                    //用產生式進行規約
                    for (int i = 0; i < 3; i++)
                    {
                        bool guiyue=false;
                        h = top;
                        for (int m = 5; m >2; m--)
                        {
                           
                            int index4=end.IndexOf(expression[i][m].ToString ());
                            int index5 = end.IndexOf(s[h].ToString());
                            if (index4 != -1 && index5 != -1 && end[index4] == s[h].ToString())
                            {
                                h--;
                            }
                            else
                            {
                                if (index4 == -1 && index5 == -1)
                                {
                                    h--;
                                }
                                else break;
                            }
                            if(m==3)
                            {
                                s[h+1] = expression[i][0];
                                top = h+1;
                                guiyue = true;
                                for (int j = 1; j<=top; j++)
                                {
                                    Console.Write(s[j]);
                                }
                                Console.WriteLine();
                            }
                        }
                        if (guiyue==true) break;
                        h = top;
                        int index6 = end.IndexOf(expression[i][7].ToString());
                        if (index6!= -1 && end[index6] == s[h].ToString())
                        {
                            s[h] = expression[i][0];
                            top = h;
                            guiyue = true;
                            for ( int j = 1; j <= top; j++)
                            {
                                Console.Write(s[j]);
                            }
                            Console.WriteLine();
                        }
                        if (guiyue==true) break;
                    }
                   // index = end.IndexOf(s[top].ToString());
                    index1 = end.IndexOf(a.ToString());
                    index0 = end.IndexOf(s[top - 1].ToString());
                  //  if (index != -1 && index1 != -1)
                 //   {
                  //      yes = (table[index, index1] == '>');
                  //  }
                  //  else
                  //  {
                        yes = (table[index0, index1] == '>');
                  //  }
                }
           // 找到了可規約串
               // bool yesless = (table[index, index1] == '<');
               // bool yesequal = (table[index, index1] == '=');
               // if (yesless  || yesequal)
               //{
                    top++;
                    s[top] = a;
                    for (int i = 1; i <= top; i++)
                    {
                        Console.Write(s[i]);
                    }
                    Console.WriteLine();
                //}
                //else
                //{
                //    Console.WriteLine("句子錯誤");
                //    return;
                //}
                next++;
            } 
            while (a != '#');
            Console.ReadLine();
        }
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费网站在线观看| 久久久三级国产网站| av成人免费在线观看| 狠狠色丁香婷婷综合| 激情深爱一区二区| 国产精品一区二区三区四区| 国产自产视频一区二区三区| 国产一级精品在线| 成人黄色网址在线观看| 成人性生交大片| jlzzjlzz亚洲女人18| 一本到高清视频免费精品| 在线观看91精品国产入口| 在线观看精品一区| 日韩一级大片在线观看| 久久一日本道色综合| 国产精品成人午夜| 亚洲大片免费看| 精品一区二区在线观看| 国产酒店精品激情| 99久久国产免费看| 91精品国产高清一区二区三区 | 国产日韩欧美精品在线| 久久久久亚洲蜜桃| 亚洲精品国久久99热| 三级欧美韩日大片在线看| 国产一区视频在线看| 色综合一区二区三区| 88在线观看91蜜桃国自产| 久久久精品综合| 亚洲精品视频免费看| 欧美aaa在线| 99视频在线精品| 91精品国产色综合久久不卡电影| www国产成人免费观看视频 深夜成人网| 欧美国产视频在线| 日韩国产成人精品| 成人黄色av电影| 制服丝袜中文字幕亚洲| 国产婷婷一区二区| 日本强好片久久久久久aaa| 丁香另类激情小说| 日韩午夜av电影| 亚洲精品视频一区二区| 国产精品88888| 3d成人h动漫网站入口| 亚洲美女在线一区| 成人免费观看av| 精品欧美一区二区在线观看| 亚洲一区二区在线视频| 国产成人精品一区二区三区四区| 欧美区视频在线观看| 中文字幕人成不卡一区| 国产精品一区二区无线| 日韩一区二区三区精品视频| 一区二区三区丝袜| 91香蕉视频污在线| 国产精品动漫网站| 丁香激情综合五月| 久久蜜桃一区二区| 久久99精品久久久久久动态图| 色欧美片视频在线观看在线视频| 欧美精彩视频一区二区三区| 免费成人在线影院| 日韩午夜av一区| 美国十次综合导航| 欧美久久久久免费| 丝袜国产日韩另类美女| 欧美久久久久久蜜桃| 亚洲mv在线观看| 欧美视频自拍偷拍| 视频在线观看一区| 日韩三级免费观看| 精品制服美女久久| 精品国精品国产| 久久精品99国产精品日本| 日韩一区二区免费视频| 久久精品国产久精国产爱| 日韩一区二区在线看| 久久精品国产久精国产| 久久亚洲欧美国产精品乐播| 国产成人一区在线| 中文字幕一区二区三区在线不卡 | 亚洲一区在线观看网站| 在线免费av一区| 亚洲在线一区二区三区| 91精品国产免费久久综合| 久久av资源网| 中文字幕乱码亚洲精品一区| 95精品视频在线| 日韩激情中文字幕| 国产日产精品1区| 93久久精品日日躁夜夜躁欧美| 一区二区三区中文字幕在线观看| 欧美日韩一级二级| 精品在线免费观看| 亚洲靠逼com| 欧美日韩精品一区二区三区四区 | 精品亚洲成a人| 中文av字幕一区| 精品视频一区二区不卡| 狠狠色狠狠色综合日日91app| 中文字幕不卡一区| 欧美中文字幕一二三区视频| 久久精品国产亚洲aⅴ| 日韩一区欧美一区| 日韩欧美一级片| 色婷婷国产精品综合在线观看| 美国精品在线观看| 亚洲欧美一区二区三区国产精品 | 蜜臀久久99精品久久久久宅男| 久久久精品人体av艺术| 欧美日韩免费高清一区色橹橹 | 亚洲国产日韩综合久久精品| 日韩欧美123| 91首页免费视频| 经典三级在线一区| 亚洲一区二区欧美| 国产精品成人在线观看| 欧美mv日韩mv国产网站| 欧美亚洲综合色| 处破女av一区二区| 精品在线你懂的| 五月综合激情网| 亚洲色图视频网站| 国产欧美精品在线观看| 在线成人午夜影院| 色一区在线观看| 99久久精品免费精品国产| 激情成人综合网| 蜜桃视频在线一区| 午夜一区二区三区在线观看| 中文字幕在线观看不卡视频| 久久精品夜夜夜夜久久| 91精品国产品国语在线不卡| 欧洲av在线精品| 99久久精品99国产精品| 成人av在线观| 国产精品香蕉一区二区三区| 免费的国产精品| 日本三级韩国三级欧美三级| 亚洲aaa精品| 亚洲综合另类小说| 亚洲在线视频一区| 亚洲一区二区在线免费观看视频| 亚洲人成小说网站色在线| 国产精品乱人伦中文| 国产欧美日本一区视频| 中文字幕va一区二区三区| 中文无字幕一区二区三区| 国产网站一区二区三区| 国产三级精品视频| 亚洲国产精品99久久久久久久久| 国产午夜久久久久| 国产精品蜜臀av| 亚洲丝袜制服诱惑| 一区二区三区资源| 亚洲午夜激情av| 性做久久久久久| 青青草成人在线观看| 美脚の诱脚舐め脚责91 | 伊人色综合久久天天人手人婷| 国产精品女人毛片| 一区二区三区视频在线观看| 亚洲一区二区在线观看视频| 日韩精品一二三| 国产一区在线观看视频| av在线不卡电影| 欧美三级中文字幕| 日韩免费观看2025年上映的电影| 26uuu色噜噜精品一区| 欧美激情一区二区三区蜜桃视频 | 欧美日韩一区二区在线观看 | 精品一区二区三区免费观看| 精品一区二区在线看| thepron国产精品| 欧美视频在线播放| 精品国产免费视频| 亚洲私人影院在线观看| 日本免费在线视频不卡一不卡二| 精品一区精品二区高清| 色婷婷香蕉在线一区二区| 欧美一区二区大片| 国产精品国产三级国产aⅴ入口 | 精品国产乱码久久久久久图片 | 国产精品家庭影院| 亚洲国产精品久久一线不卡| 蜜桃视频第一区免费观看| 99久久精品国产观看| 欧美videos大乳护士334| 亚洲免费资源在线播放| 奇米精品一区二区三区在线观看一| 国产乱理伦片在线观看夜一区| 色欧美88888久久久久久影院| 日韩一级片网站| 一区二区三区在线看| 国产成人在线看| 欧美mv日韩mv国产网站| 亚洲成av人片一区二区| 99精品欧美一区|