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

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

?? suanfuyouxianfenxiqi.txt

?? 【目的】 設計一個算符優先分析器
?? TXT
字號:
【目的】 設計一個算符優先分析器,理解優先分析方法的原理。

【要求】 使用算符優先分析算法分析下面的文法:

E’ → #E#

E → E+T | T

T → T*F | F

F → P^F | P

P → (E) | i

其中i可以看作是一個終結符,無需作詞法分析。具體要求如下:

1. 如果輸入符號串為正確句子,顯示分析步驟,包括分析棧中的內容、優先關系、輸入符號串的變化情況;

2. 如果輸入符號串不是正確句子,則指示出錯位置。

【方法】 首先構造算符優先關系表,然后根據算符優先分析算法編寫程序。

【實驗環境和工具】 本實驗使用的是C#。

說明:本程序輸入的目標字符串要以#開頭和結尾。

本程序的運行環境是visual studio 2005.net,選擇的是控制臺應用程序。


源程序代碼:

/////文件【program.cs】


using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //顯示產生式的內容
            Console.WriteLine("產生式為:=====================================================");
            Class1 cs1 = new Class1();
            cs1.generate = new Generate[9];
            cs1.InitGenerate(cs1.generate);
            cs1.Display(cs1.generate);
            Console.WriteLine("");
            Console.WriteLine();
            cs1.DispTable();

            //開始分析句子
            Console.WriteLine();
            Console.WriteLine("===============================================================");
            Console.WriteLine("請輸入目標句子(以#開頭和結尾):");
            Class1.strWhole = Console.ReadLine();
          
             cs1.process();
         
            Console.ReadLine();
        }
    }
}

/////[文件class1.cs]
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    public struct Generate //用結構體存儲產生式
    {
        public char left;//左部
        public string right;//右部

    }
    class Class1
    {
       public  static string strWhole = "";//句子字符串
        static char tempChar = ' ';//當前字符
        static int p = 1;//剩余字符串的當前位置
        static int top = 1;//棧頂
        static int j = 1;
        static char[] stack = new char[30];
        public Generate[] generate;
        char[] VT;//存儲非終結符的數組
        static char[] VN = new char[] { 'S', 'E', 'E', 'T', 'T', 'F', 'F', 'P', 'P' };
        static char[,] priority = new char[7, 7];//存儲算符優先關系的數組
        public Class1()
        {
            stack[0] = ' ';
            stack[1] = '#';
            this.VT = new char[7] { '+', '*', '^', '(', ')', 'i', '#' };

        }
        //先初始化產生式并存入數組
        public void InitGenerate(Generate[] generate)
        {
            generate[0].left = 'S';
            generate[0].right = "#E#";
            generate[1].left = 'E';
            generate[1].right = "E+T";
            generate[2].left = 'E';
            generate[2].right = "T";
            generate[3].left = 'T';
            generate[3].right = "T*F";
            generate[4].left = 'T';
            generate[4].right = "F";
            generate[5].left = 'F';
            generate[5].right = "P^F";
            generate[6].left = 'F';
            generate[6].right = "P";
            generate[7].left = 'P';
            generate[7].right = "(E)";
            generate[8].left = 'P';
            generate[8].right = "i";
        }
        //將產生式進行顯示
        public void Display(Generate[] generate)
        {
            for (int i = 0; i < 9; i++)
            {
                Console.WriteLine("\t" + generate[i].left + "->" + generate[i].right);
            }
        }
        public void DispTable()
        {
            //先將優先關系初始化為N
            for (int i = 0; i < 7; i++)
                for (int j = 0; j < 7; j++)
                {
                    priority[i, j] = 'N';
                }
            //存儲FIRSTVT集合
            char[] FS = new char[] { '#' };
            char[] FE = new char[] { '+', '*', '^', '(', 'i' };
            char[] FT = new char[] { '*', '^', '(', 'i' };
            char[] FF = new char[] { '^', '(', 'i' };

            priority[6, 6] = '=';//# = #
            priority[3, 4] = '=';//( = )
            //#<FIRSTVT(E)
            for (int i = 0; i <= 6; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    if (VT[i] == FE[j])
                    {
                        priority[3, i] = '<'; //( <FIRST(E)
                        priority[6, i] = '<';
                    }
                }
            }
            //+<FIRSTVT(T)
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    if (VT[i] == FT[j])
                        priority[0, i] = '<';
                }
            }
            //*<FIRSTVT(F)
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    if (VT[i] == FF[j])
                    {
                        priority[1, i] = '<';
                        priority[2, i] = '<';
                    }
                }
            }
            //存儲LASTVT集合
            char[] LE = new char[] { '+', '*', '^', ')', 'i' };
            char[] LT = new char[] { '*', '^', ')', 'i' };
            char[] LP = new char[] { ')', 'i' };
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    if (VT[i] == LE[j])
                    {
                        priority[i, 6] = '>';//LASTVT(E)> #
                        priority[i, 0] = '>';//LASTVT(E)> +
                        priority[i, 4] = '>';//LASTVT(E)> ')'
                    }
                }
            }
            //LASTVT(T)> *

            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    if (VT[i] == LT[j])
                        priority[i, 1] = '>';
                }
            }
            //LASTVT(P)> '^'
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    if (VT[i] == LP[j])
                        priority[i, 2] = '>';
                }
            }
            //顯示算府優先關系表
            Console.WriteLine("算符優先關系表為:");
            Console.WriteLine("\t+\t*\t^\t(\t)\ti\t#\t");
            Console.WriteLine("----------------------------------------------------------");
            for (int i = 0; i < 7; i++)
            {
                Console.Write(VT[i] + "\t");
                for (int j = 0; j < 7; j++)
                    Console.Write(priority[i, j].ToString() + "\t");

                Console.WriteLine();
            }
            


        }
        public void process()
        {
            char result = ' ';
            char Q = ' ';
            string str="";
           
            //確保以#開頭和結尾
            while (strWhole.Substring(0, 1) != "#" || strWhole.Substring(strWhole.Length - 1, 1) != "#")
            {
                Console.WriteLine("請重新輸入,以#開頭和結尾:");
                strWhole = Console.ReadLine();
            }
            Console.WriteLine("棧         當前符號       剩余字符串    操作");
            readNext();
                Display();
            while (true )
            {
              
               
                if (isMemVT(stack[top],this .VT ))
                    j = top;
                else
                    j = top - 1;
                result = CompareChar(stack[j], tempChar, this.VT);
               
                if (result == '>')
                { 
                    Q = stack[j];
                   while (CompareChar(stack[j], Q, this.VT) != '<')
                    {
                        Q = stack[j];
                        if (isMemVT(stack[j - 1], this.VT))
                            j = j - 1;
                        else j = j - 2;
                    }
                    for (int i = j + 1; i <= top; i++)
                    {
                        str += stack[i];
                    }
                     Console.Write(  "\t歸約"+"\n");
                    top = j + 1;
                    stack[top] = 'N';
                    Display();
                   
                    
                }
                else if (result == '<')
                { Console.Write(" \t" + "移進" + "\n");
                    top = top + 1;
                    stack[top] = tempChar;
                    readNext(); 
                    Display();
                   
                  
                }
                else if (result == '=')
                {
                    if (stack[j] == '#')
                    {
                        if (p == strWhole.Length - 1)
                        {
                            Console.WriteLine();
                            Console.WriteLine("分析成功!");
                            break;
                        }
                        else
                        {
                            Console.WriteLine("出錯!");
                            break;
                        }
                    }
                    else
                    {
                        Console.Write("\t移進\n");
                        top = top + 1;
                        stack[top] = tempChar;
                        readNext();
                        Display();
                    }
                }
                else
                { 
                Console .WriteLine ("出錯!");
                break;
                }
            }
         

        }
        static void Display()
        {
            for (int i = 1; i <= top; i++)
            {
                Console.Write(stack[i]);
            }
            Console.Write("\t\t" + tempChar.ToString()+"\t\t");
            if (tempChar == '#')   Console.Write("");
            else
            {
                for (int i = p; i <= strWhole.Length - 1; i++)
                {
                    Console.Write(strWhole[i]);
                }
            }
            
        }
        static bool isMemVT(char c, char[] VT)
        {
            bool r = false;
            for (int i = 0; i <=VT.Length - 1; i++)
            {
                if (c == VT[i])
                {
                    r = true;
                    break;
                }
                    
            }
            return r;
        }

        static void readNext()
        {
            tempChar = strWhole [p];
            if (p <= strWhole.Length - 2)
                p += 1;
            else p = strWhole.Length - 1;
        }
        static char CompareChar(char c1, char c2, char[] VT)
        {

            int a = 0, b = 0;
            for (int i = 0; i < 7; i++)
            {
                if (VT[i] == c1) a = i;
                if (VT[i] == c2) b = i;

            }
            return priority[a, b];
        }
       public  static void clear()
        {
            top = 1;
            p = 1;
            j = 1;
            strWhole = "";
            tempChar =' ';
            strWhole="";
            char []stack = new char[30];
        }
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产三级国产aⅴ原创| 亚洲第一二三四区| 免费xxxx性欧美18vr| 欧美性大战xxxxx久久久| 综合分类小说区另类春色亚洲小说欧美 | 欧美一级日韩不卡播放免费| 国产精品的网站| 99在线热播精品免费| 精品成人在线观看| 国产一区不卡在线| 国产视频一区在线观看| 国产激情视频一区二区三区欧美| 久久精品视频免费观看| 国产成人精品亚洲777人妖 | 欧美色视频一区| 日韩综合一区二区| 欧美一区二区三区免费在线看 | 午夜成人在线视频| 欧美一区二区三区影视| 久久99日本精品| 国产日产欧美精品一区二区三区| 国产jizzjizz一区二区| 亚洲天堂a在线| 欧美日韩成人在线一区| 奇米888四色在线精品| 久久久不卡网国产精品一区| 成人av动漫在线| 亚洲一区二区三区不卡国产欧美| 欧美体内she精高潮| 日本成人中文字幕| 国产日韩视频一区二区三区| 成人激情综合网站| 亚洲成人免费在线观看| 久久亚洲精品国产精品紫薇| gogogo免费视频观看亚洲一| 亚洲一区二区视频| 精品国产乱码久久久久久蜜臀| 久久99在线观看| 亚洲欧美日韩中文字幕一区二区三区| 欧美日韩一区精品| 精品在线你懂的| 中文字幕一区视频| 日韩欧美视频一区| 不卡区在线中文字幕| 亚洲高清久久久| 欧美国产日韩精品免费观看| 欧美剧在线免费观看网站| 国产成人啪午夜精品网站男同| 一区二区三区国产精品| 欧美精品一区二区三区久久久 | 久久精品视频一区| 在线一区二区视频| 国产一区二区0| 亚洲成人1区2区| 亚洲欧洲国产专区| 国产日韩欧美麻豆| 国产亚洲污的网站| 亚洲精品在线电影| 日韩一区二区三区免费观看| 欧美人妇做爰xxxⅹ性高电影| 一本久道久久综合中文字幕| 岛国精品在线观看| 国产mv日韩mv欧美| 国产麻豆精品久久一二三| 激情欧美一区二区| 麻豆久久久久久久| 日韩电影免费在线看| 肉肉av福利一精品导航| 亚洲高清在线视频| 亚洲已满18点击进入久久| 亚洲黄色片在线观看| 自拍偷拍国产亚洲| 亚洲精品国产a| 亚洲精品写真福利| 亚洲综合视频网| 首页国产丝袜综合| 美日韩一区二区三区| 精品午夜久久福利影院| 国产一区二区三区国产| 国产精品伊人色| 成人在线综合网| 91丨porny丨在线| 欧美在线影院一区二区| 欧美日韩精品一区二区三区四区 | 洋洋av久久久久久久一区| 一区二区三区免费在线观看| 亚洲一区精品在线| 日韩和的一区二区| 狠狠网亚洲精品| 成人高清视频在线观看| 99精品久久免费看蜜臀剧情介绍| 91麻豆福利精品推荐| 欧美精品丝袜久久久中文字幕| 欧美成人精品二区三区99精品| 欧美精品一区二区久久久| 欧美三级日韩在线| 日韩欧美高清一区| 日本一区二区免费在线| 一区二区三区在线播| 日本欧美一区二区三区乱码| 国模少妇一区二区三区| 色先锋资源久久综合| 91精品国产一区二区三区香蕉| 久久综合资源网| 一卡二卡三卡日韩欧美| 蜜桃视频在线观看一区二区| 成人高清伦理免费影院在线观看| 日本精品裸体写真集在线观看| 日韩一级大片在线| 国产精品乱码人人做人人爱| 石原莉奈在线亚洲二区| 国产精品一区二区三区乱码| 欧美亚洲图片小说| 26uuu成人网一区二区三区| 亚洲欧美国产77777| 久久99蜜桃精品| 91豆麻精品91久久久久久| 日韩精品一区二区三区四区| 亚洲欧美另类久久久精品| 九九精品一区二区| 91国产免费看| 国产精品色在线| 麻豆高清免费国产一区| 在线观看不卡一区| 国产日韩欧美不卡在线| 日韩不卡一区二区三区| 色综合欧美在线| 国产亚洲精品资源在线26u| 视频一区在线播放| 91在线视频官网| 久久蜜桃香蕉精品一区二区三区| 亚洲激情第一区| 国产99久久久国产精品潘金| 日韩一级免费一区| 一区二区成人在线视频| 播五月开心婷婷综合| 欧美精品一区二区久久婷婷| 日韩激情视频在线观看| 在线免费观看不卡av| 国产精品无遮挡| 国产一区二区免费看| 日韩视频一区在线观看| 天涯成人国产亚洲精品一区av| 色综合久久久久久久久| 国产精品福利电影一区二区三区四区| 狠狠色丁香婷婷综合久久片| 欧美日韩的一区二区| 亚洲午夜成aⅴ人片| 色综合网站在线| 亚洲欧美成人一区二区三区| 美女网站视频久久| 欧美日韩国产精品成人| 亚洲男女毛片无遮挡| 91蜜桃免费观看视频| **欧美大码日韩| www.亚洲色图| 国产午夜精品在线观看| 韩国女主播一区二区三区| 日韩美女一区二区三区四区| 日韩精品免费专区| 欧美日韩一二三区| 一区二区三区丝袜| 色综合婷婷久久| 亚洲欧美另类久久久精品2019| 成人性生交大片免费看视频在线 | 欧美精品日韩精品| 亚洲一卡二卡三卡四卡五卡| 欧美午夜在线一二页| 亚洲国产视频直播| 欧美日韩免费视频| 视频在线观看91| 日韩欧美中文字幕制服| 国精品**一区二区三区在线蜜桃| 久久一区二区三区四区| 国产电影精品久久禁18| 国产免费观看久久| 91麻豆免费看| 天堂一区二区在线免费观看| 在线综合+亚洲+欧美中文字幕| 午夜久久电影网| 日韩视频免费直播| 国产剧情一区二区| 国产精品成人一区二区三区夜夜夜| 99久精品国产| 丝袜脚交一区二区| 久久免费美女视频| 91在线视频官网| 首页综合国产亚洲丝袜| 26uuuu精品一区二区| 91影院在线观看| 日韩精品免费专区| 国产日韩在线不卡| 在线一区二区视频| 经典三级视频一区| 中文字幕综合网| 日韩午夜三级在线| 播五月开心婷婷综合| 五月婷婷激情综合| 欧美国产在线观看| 欧美人与禽zozo性伦|