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

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

?? syntaxanalyser.cs

?? 編譯原理語法分析和詞法分析綜合實驗: 源程序、可執行程序、測試程序文件、程序運行說明文件、實驗報告。
?? CS
字號:
?using System;
using System.Collections.Generic;
using System.Text;

namespace Lane.Compiler.WordAnalyser.Core
{
    public class SyntaxAnalyser
    {
        Token[] tokens;
        Token currentToken;
        int nextIndex;
        bool insideFunction;
        List<SyntaxError> errors = new List<SyntaxError>();

        List<Symbol> globalSymbols = new List<Symbol>();
        List<Symbol> localSymbols = new List<Symbol>();


        List<Lane.Compiler.WordAnalyser.ExpressionCalculation.Expression> express = new List<Lane.Compiler.WordAnalyser.ExpressionCalculation.Expression>();

        public List<Lane.Compiler.WordAnalyser.ExpressionCalculation.Expression> Expressions
        {
            get { return express; }
        }
        public List<SyntaxError> Errors
        {
            get { return errors; }
        }


        public bool Analysis(Token[] tokens)
        {
            if (tokens == null || tokens.Length == 0)
                return false;
            this.tokens = tokens;
            nextIndex = 0;
            insideFunction = false;
            currentToken = null;
            errors.Clear();
            globalSymbols.Clear();
            localSymbols.Clear();
            express.Clear();
            Loop();
            
            return errors.Count == 0;
        }

        private void Loop()
        {
            while (nextIndex < tokens.Length)
            {
                Begin();
                if (errors.Count > 0)
                    break;
            }
        }

        private void Begin()
        {
            Token t = NextToken();
            
            switch (t.Group)
            {
                case GroupNames.Type:
                    State_Definition();
                    break;
                case GroupNames.ID:
                    State_Expression();
                    break;
                default:
                    AddError("Type descriptor is expected.");
                    break;
            }
        
        }

        private void State_Expression()
        {
            if (!insideFunction)
            {
                AddError("Type descriptor is expected.");
                return;
            }
            Token t = currentToken;
            string type = GetSymbolType(t.Value);
            if (type == null)
            {
                AddError(string.Format("{0} is not defined.", t.Value));
            }
            t = NextToken();
            if (t.Value == "(")
            {
                t = NextToken();
                if (t.Value != ")")
                {
                    AddError("')' is missing.");
                }
                t = NextToken();
            }
            else if (t.Value == "=")
            {
                Token eqToken = t;
                t = NextToken();
                List<Token> exp = new List<Token>();
                while (nextIndex < tokens.Length)
                {
                    if (t.Value == ";")
                        break;
                    if (t.Group == GroupNames.ID || t.Group == GroupNames.Number || t.Group == GroupNames.Operator)
                    {
                        exp.Add(t);
                    }
                    else
                    {
                        AddError("ID, operator or number is expected in expression.");
                        break;
                    }
                    t = NextToken();
                }
                if (exp.Count == 0)
                {
                    AddError("Value Expression is expected.");
                }
                else
                {
                    StringBuilder sb = new StringBuilder();
                    sb.Append(exp[0].Value);
                    for (int i = 1; i < exp.Count; i++)
                    {
                        sb.Append(" ");
                        sb.Append(exp[i].Value);
                    }
                    bool ok;
                    ExpressionCalculation.Expression e = null;
                    try
                    {
                        e = new Lane.Compiler.WordAnalyser.ExpressionCalculation.Expression(sb.ToString());
                        ok = e.CanCalculate();

                    }
                    catch
                    {
                        ok = false;
                    }
                    if (ok == false)
                    {
                        AddError("Expression Calculation ERROR.");
                    }
                    else
                    {
                        e.Token = eqToken;
                        express.Add(e);

                    }
                    
                    
                }
            }
            else
            {
                AddError("Expression error.");
            }
            if (t.Value != ";")
                AddError("';' is missing.");
            
        }

        private string GetSymbolType(string name)
        {
            List<Symbol>[] lists = new List<Symbol>[] { localSymbols, globalSymbols };
            foreach (List<Symbol> list in lists)
            {
                foreach (Symbol s in list)
                {
                    if (s.Name == name)
                    {
                        return s.Type;
                    }
                }
            }
            return null;
        
        }

        private void State_Definition()
        {
            Token t = null;
            t = currentToken;
            string type = t.Value;
            t = NextToken();
            if (t.Group != GroupNames.ID)
            {
                AddError("ID symbol is expected.");
                return;
            }
            string id = t.Value;

            // Predict
            t = NextToken();

            if (t.Group == GroupNames.Operator)
            {
                //nextIndex++;

                // Function Defined
                if (t.Value == "(")
                {
                    globalSymbols.Add(new Symbol(id, "Function"));
                    State_Definition_Function();                    
                }
                else if (t.Value == ";")
                {
                    if (insideFunction)
                    {
                        localSymbols.Add(new Symbol(id, type));
                    }
                    else
                    {
                        globalSymbols.Add(new Symbol(id, type));
                    }
                }
                else
                {
                    AddError("Definition is incompleted. May be ';' is missing.");
                }
            }
            else
            {
                AddError("Definition is incompleted. May be ';' is missing.");
            }
            
            
        }

        private void State_Definition_Function()
        {
            if (insideFunction)
            {
                AddError("Function define inside function is not support.");
                return;
            }
            Token t = NextToken();
            if (t.Value != ")")
            {
                AddError("')' is missing in function definition.");
                return;
            }
            t = NextToken();
            if (t.Value != "{")
            {
                AddError("'{' is missing in function definition.");
                return;
            }
            insideFunction = true;

            while (nextIndex < tokens.Length)
            {
                if (tokens[nextIndex].Value == "}")
                {
                    NextToken();
                    break;
                }
                Begin();
                if (errors.Count > 0)
                    break;
            }

            insideFunction = false;
        }

        private Token NextToken()
        {
            return currentToken = tokens[nextIndex++]; 
        }

        private void AddError(string message)
        {
            SyntaxError se = new SyntaxError(currentToken, message);
            errors.Add(se);
        }
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.色综合.com| 国产精品成人一区二区三区夜夜夜 | 亚洲另类在线制服丝袜| 图片区小说区国产精品视频| av在线综合网| 欧美日韩国产另类一区| 成人免费视频在线观看| 国产成人免费视频网站| 日韩欧美中文一区| 婷婷六月综合亚洲| 91黄色免费看| 亚洲男人电影天堂| 日日骚欧美日韩| 亚洲精品一区二区三区四区高清 | 亚洲欧美激情一区二区| 奇米色一区二区| 欧美午夜一区二区| 亚洲小说春色综合另类电影| 国产一区二区三区久久悠悠色av | 欧美丰满一区二区免费视频| 亚洲一区二区黄色| 欧美老女人在线| 日本中文字幕一区二区视频| 欧美一激情一区二区三区| 亚洲精品欧美二区三区中文字幕| 日本精品免费观看高清观看| 国产欧美日韩中文久久| 免费观看91视频大全| 日韩一区二区视频| 日韩中文欧美在线| 欧美日本高清视频在线观看| 激情文学综合丁香| 视频在线观看一区| 日韩欧美一二区| 韩国女主播一区| 亚洲人精品午夜| 欧美色图片你懂的| 亚洲成a人片在线不卡一二三区| 欧美四级电影在线观看| 蜜桃视频第一区免费观看| 精品国内片67194| proumb性欧美在线观看| 亚洲色图19p| 欧美绝品在线观看成人午夜影视| 亚洲18色成人| 2017欧美狠狠色| 在线精品视频一区二区三四| 亚洲成人tv网| 久久久精品国产免大香伊| 亚洲国产精品久久艾草纯爱| 欧美三级电影网站| 国产乱码精品一区二区三区av| 亚洲欧美中日韩| 欧美精品九九99久久| 亚洲成人免费看| 91亚洲国产成人精品一区二三| 亚洲一区二区美女| 国产亚洲污的网站| 欧美三级视频在线| 国产v综合v亚洲欧| 亚洲国产成人av网| 国产欧美日韩另类视频免费观看| 91亚洲永久精品| 18成人在线观看| 精品伦理精品一区| 欧美性做爰猛烈叫床潮| 亚洲第一成人在线| 欧美高清在线精品一区| 欧美电影在线免费观看| 懂色av一区二区三区免费观看| 一区二区三区四区乱视频| 国产不卡一区视频| 亚洲不卡一区二区三区| 欧美国产激情一区二区三区蜜月| 欧美电影影音先锋| 91国偷自产一区二区使用方法| 激情综合色播激情啊| 亚洲一区二区精品视频| 国产精品日韩精品欧美在线| jizzjizzjizz欧美| 日日摸夜夜添夜夜添精品视频| 国产日产精品一区| 日韩免费视频一区| 欧美人体做爰大胆视频| 国产69精品久久久久毛片| 日韩影院精彩在线| 亚洲精品国产无天堂网2021| 久久久久97国产精华液好用吗| 欧美视频完全免费看| 国产精品911| 99精品视频中文字幕| 国产一区二区电影| 美脚の诱脚舐め脚责91 | 中文字幕中文在线不卡住| 精品国精品自拍自在线| 欧美一级二级三级乱码| 欧美综合在线视频| 国产精品私人影院| 国产精品国产三级国产aⅴ入口| 久久综合精品国产一区二区三区| 91麻豆精品国产91久久久久| 欧美日韩一区视频| 欧美欧美午夜aⅴ在线观看| 欧洲一区在线电影| 午夜伦欧美伦电影理论片| 亚洲图片欧美色图| 亚洲综合男人的天堂| 天堂成人国产精品一区| 无码av免费一区二区三区试看| 亚洲成人激情自拍| 奇米影视7777精品一区二区| 日本伊人色综合网| 精品一区二区免费在线观看| 国产乱码精品1区2区3区| 国产一区久久久| 免费高清成人在线| 国产精品亚洲一区二区三区在线| 国产一区二区电影| 麻豆久久一区二区| 国产一区二区三区最好精华液| 国产传媒日韩欧美成人| av在线一区二区三区| 色噜噜久久综合| 欧美日韩视频在线第一区 | 国产精品资源在线观看| 国产麻豆精品95视频| 国产东北露脸精品视频| 国产米奇在线777精品观看| 91一区二区三区在线观看| 欧美在线免费观看亚洲| 色偷偷久久人人79超碰人人澡| 欧美日韩中字一区| 26uuu色噜噜精品一区二区| 久久久91精品国产一区二区精品| 欧美大黄免费观看| 国产精品久久久久久久久搜平片| 亚洲日本va午夜在线影院| 亚洲1区2区3区视频| 国产黄色精品网站| 日本高清视频一区二区| 91精品黄色片免费大全| 国产精品理论在线观看| 亚洲成人黄色影院| 午夜日韩在线电影| 国产精品996| 欧美三区在线观看| 欧美一区二区三级| 日韩写真欧美这视频| 国产精品乱码人人做人人爱| 亚洲国产精品人人做人人爽| 精品一区二区三区在线观看| 99国内精品久久| 欧美色爱综合网| 中文字幕亚洲一区二区va在线| 亚洲黄色av一区| 国产精品一区一区三区| 国产在线播放一区三区四| 91丨国产丨九色丨pron| 日韩欧美卡一卡二| 国产三级一区二区| 奇米精品一区二区三区在线观看| 国产美女娇喘av呻吟久久| 91影视在线播放| 久久久久久久免费视频了| 亚洲国产视频在线| caoporen国产精品视频| 久久综合av免费| 午夜成人免费视频| 色综合av在线| 国产精品欧美久久久久无广告| 国产精品毛片无遮挡高清| 亚洲一区二区三区四区在线 | 欧美一区二区日韩一区二区| 一区二区高清在线| 不卡的av在线| 亚洲人被黑人高潮完整版| 国产激情一区二区三区| 色综合av在线| 中文字幕av不卡| 成人午夜精品一区二区三区| 一本久久a久久免费精品不卡| 久久综合资源网| 蜜桃在线一区二区三区| 欧美久久久一区| 亚洲色图欧美激情| av资源网一区| 91精品国产免费久久综合| 五月婷婷另类国产| caoporn国产一区二区| 日本一区二区三区dvd视频在线| 男男成人高潮片免费网站| 欧美日本在线播放| 日韩高清不卡一区二区| 另类综合日韩欧美亚洲| 日韩视频永久免费| 卡一卡二国产精品| xfplay精品久久| 七七婷婷婷婷精品国产| 国产亲近乱来精品视频| 国产精品一品二品|