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

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

?? lro.java

?? LRO文法的Java版本
?? JAVA
字號:
package cn.edu.ynu.sei.lr.lr0;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;


public class LR0
{

    public static int PRODUCT_SIZE;

    public static final List<Product> PRODUCTS = new ArrayList<Product>();

    public static final String START = "S";

    public static final List<String> TERMINATORS = new ArrayList<String>();

    public static final List<String> NTERMINATORS = new ArrayList<String>();

    public static List<ItemSet> itemSetFamilies = new ArrayList<ItemSet>();

    public static List<AnalysisItem> analysisTable = new ArrayList<AnalysisItem>();

    public static Stack<Integer> stateStack = new Stack<Integer>();

    public static Stack<String> symbolStack = new Stack<String>();

    public static List<Product> getProductByRightPart(String rightPart)
    {
        List<Product> ret = new ArrayList<Product>();

        for (Product p : PRODUCTS)
        {
            if (p.leftPart.equals(rightPart))
            {
                ret.add(p);
            }
        }
        return ret;
    }

    public static void initItemSetFamilies()
    {
        ItemSet is = new ItemSet();
        is.add(PRODUCTS.get(0));

        if (NTERMINATORS.contains(is.get(0).rightPart.substring(0, 1)))
        {
            List<Product> ps = getProductByRightPart(is.get(0).rightPart);
            for (Product p : ps)
            {
                is.add(p);
            }
        }
        itemSetFamilies.add(is);
    }

    public static void displayItemSetFamilies()
    {
        System.out.println("項目集規范族如下:");
        int i = 0;
        for (ItemSet is : itemSetFamilies)
        {
            System.out.println("--------------");
            System.out.println("I" + i + ": ");
            i++;
            for (Item item : is.items)
            {
                System.out.println(item.toString());
            }
        }
        System.out.println("--------------");
    }

    public static void initG()
    {

        PRODUCTS.add(new Product(START, "E"));
        PRODUCTS.add(new Product("E", "aA"));
        PRODUCTS.add(new Product("E", "bB"));
        PRODUCTS.add(new Product("A", "cA"));
        PRODUCTS.add(new Product("A", "d"));
        PRODUCTS.add(new Product("B", "cB"));
        PRODUCTS.add(new Product("B", "d"));
        PRODUCT_SIZE = PRODUCTS.size();

        TERMINATORS.add("a");
        TERMINATORS.add("b");
        TERMINATORS.add("c");
        TERMINATORS.add("d");

        NTERMINATORS.add("S");
        NTERMINATORS.add("E");
        NTERMINATORS.add("A");
        NTERMINATORS.add("B");
    }

    public static void displayG()
    {
        System.out.println("開始符號:" + START);
        System.out.println("文法的產生式如下:");
        for (Product p : PRODUCTS)
        {
            System.out.println(p.toString());
        }
    }

    public static void main(String[] args)
    {
        initG();
        displayG();
        initItemSetFamilies();
        buildItemSetCore(0);
        displayItemSetFamilies();
        buildAnalysisTable();
        displayAnalysisTable();
        initStack();
        if (match("bccd#"))
        {
            System.out.println("匹配成功!");
        }
        else
        {
            System.out.println("匹配失敗!!!!");
        }

    }

    public static void buildItemSetCore(int itemSetIndex)
    {
        ItemSet startItemSet = itemSetFamilies.get(itemSetIndex);

        List<Item> cores = getCopyOfItems((startItemSet.items));
        for (Item item : cores)
        {
            if (item.rightPart.length() == item.dotPos)
            {
                continue;
            }
            ItemSet is = new ItemSet();
            item.dotPos++;
            is.add(item);

            if (contains(item))
            {
                continue;
            }

            itemSetFamilies.add(is);

            buildItemSetElements(is);
        }

        if (itemSetIndex < itemSetFamilies.size() - 1)
        {
            buildItemSetCore(itemSetIndex + 1);
        }
    }

    public static List<Item> getCopyOfItems(List<Item> list)
    {
        List<Item> ret = new ArrayList<Item>();
        for (Item i : list)
        {
            Item item = new Item(i.leftPart, i.rightPart, i.dotPos);
            ret.add(item);
        }
        return ret;
    }

    public static void buildItemSetElements(ItemSet is)
    {
        Item item = is.get(0);
        int dotPos = item.dotPos;
        if (item.rightPart.length() == dotPos)
        {
            return;
        }
        if (NTERMINATORS.contains(item.rightPart.substring(dotPos, dotPos + 1)))
        {
            String sysm = item.rightPart.substring(dotPos, dotPos + 1);
            List<Product> ps = getProductByRightPart(sysm);
            for (Product p : ps)
            {
                is.add(p);

            }
        }
    }

    public static boolean contains(Item coreItem)
    {
        for (ItemSet is : itemSetFamilies)
        {
            if (is.get(0).leftPart.equals(coreItem.leftPart) && is.get(0).rightPart.equals(coreItem.rightPart) && is.get(0).dotPos == coreItem.dotPos)
            {
                return true;
            }
        }
        return false;
    }

    public static void buildAnalysisTable()
    {
        for (int i = 0; i < itemSetFamilies.size(); i++)
        {
            ItemSet is = itemSetFamilies.get(i);
            AnalysisItem ai = new AnalysisItem();
            ai.stateNum = i;
            for (int j = 0; j < is.items.size(); j++)
            {
                Item item = is.get(j);
                int dotPos = item.dotPos;
                if (dotPos == item.rightPart.length())
                {
                    if (item.rightPart.equals(PRODUCTS.get(0).rightPart))
                    {
                        ai.add("#", Integer.MAX_VALUE);
                        continue;
                    }
                    int numOfProduct = 0 - getNumOfProduct(item.leftPart, item.rightPart);
                    for (int k = 0; k < NTERMINATORS.size(); k++)
                    {
                        String nterminator = NTERMINATORS.get(k);
                        ai.add(nterminator, numOfProduct);
                    }
                    ai.add("#", numOfProduct);

                    continue;
                }
                else
                {
                    String afterDotPos = item.rightPart.substring(dotPos, dotPos + 1);
                    int numOfItemSet = getNumOfItemSet(item, afterDotPos);
                    ai.add(afterDotPos, numOfItemSet);
                    continue;

                }
            }
            analysisTable.add(ai);
        }
    }

    public static void displayAnalysisTable()
    {
        System.out.println("分析表如下:");
        for (int k = 0; k < analysisTable.size(); k++)
        {
            AnalysisItem ai = analysisTable.get(k);
            System.out.println("-------------");
            System.out.println("狀態" + k);
            for (int i = 0; i < ai.symbolAndActOrGoStateNum.size(); i++)
            {
                System.out.println("{" + ai.symbolAndActOrGoStateNum.get(i).grammaticalSymbol + " " + ai.symbolAndActOrGoStateNum.get(i).ActOrGoStateNum + "}");
            }
        }
    }

    public static int getNumOfItemSet(Item itm, String afterDotPos)
    {
        for (int i = 0; i < itemSetFamilies.size(); i++)
        {
            ItemSet is = itemSetFamilies.get(i);
            for (int j = 0; j < is.items.size(); j++)
            {
                Item item = is.get(j);
                if (item.dotPos >= 1 && (item.dotPos <= item.rightPart.length()) && (itm.leftPart.equals(item.leftPart)))
                {
                    String beforeDotPos = item.rightPart.substring(item.dotPos - 1, item.dotPos);
                    if (beforeDotPos.equals(afterDotPos))
                    {
                        return i;
                    }
                }
            }
        }
        return Integer.MIN_VALUE;
    }

    public static int getNumOfProduct(String leftPart, String rightPart)
    {
        for (int i = 0; i < PRODUCT_SIZE; i++)
        {
            Product p = PRODUCTS.get(i);
            if (p.leftPart.equals(leftPart) && p.rightPart.equals(rightPart))
            {
                return i;
            }
        }
        return -1;
    }

    public static int findGoState(String curSymbol, int curStateNum)
    {
        for (AnalysisItem ai : analysisTable)
        {
            if (ai.stateNum == curStateNum)
            {
                for (SymbolAndActOrGoStateNum goFunction : ai.symbolAndActOrGoStateNum)
                {
                    if (goFunction.grammaticalSymbol.equals(curSymbol))
                    {
                        return goFunction.ActOrGoStateNum;
                    }
                }
            }
        }
        return Integer.MIN_VALUE;
    }

    public static boolean match(String is)
    {
        if (is.isEmpty())
        {
            is = "#";
        }
        String currentSymbol = is.substring(0, 1);
        int goStateNum = findGoState(currentSymbol, stateStack.peek());
        displayStateStack();
        System.out.print(" | ");
        displaySymbolStack();
        System.out.println(" | " + is);
        if (goStateNum == Integer.MIN_VALUE)
        {
            return false;
        }
        if (goStateNum > 0 && TERMINATORS.contains(currentSymbol))
        {
            stateStack.push(goStateNum);
            symbolStack.push(currentSymbol);
        }
        if (goStateNum < 0 && (TERMINATORS.contains(currentSymbol) || currentSymbol.equals("#")))
        {
            int k = PRODUCTS.get(0 - goStateNum).rightPart.length();

            for (int i = 0; i < k; i++)
            {
                stateStack.pop();
                symbolStack.pop();
            }

            symbolStack.push(PRODUCTS.get(0 - goStateNum).leftPart);
            stateStack.push(findGoState(PRODUCTS.get(0 - goStateNum).leftPart,
                                        stateStack.peek()));
        }
        if (goStateNum == Integer.MAX_VALUE && currentSymbol.equals("#"))
        {
            return true;
        }
        if (goStateNum > 0 && NTERMINATORS.contains(currentSymbol))
        {
            symbolStack.push(currentSymbol);
            stateStack.push(goStateNum);
        }

        return match(is.substring(1, is.length()));
    }

    public static void displaySymbolStack()
    {
        for (int i = 0; i < symbolStack.size(); i++)
        {
            System.out.print(symbolStack.get(i));
        }
    }

    public static void displayStateStack()
    {
        for (int i = 0; i < stateStack.size(); i++)
        {
            System.out.print(stateStack.get(i));
        }
    }


    public static void initStack()
    {
        symbolStack.push("#");
        stateStack.push(0);
        System.out.println("分析過程如下:");
        System.out.println("狀態棧  |  符號棧 | 輸入串");
    }
}

package cn.edu.ynu.sei.lr.lr0;

import java.util.ArrayList;
import java.util.List;

public class AnalysisItem
{

    public int stateNum;

    List<SymbolAndActOrGoStateNum> symbolAndActOrGoStateNum = new ArrayList<SymbolAndActOrGoStateNum>();

    public void add(String grammaticalSymbol, int actOrGoStateNum)
    {
        symbolAndActOrGoStateNum.add(new SymbolAndActOrGoStateNum(grammaticalSymbol, actOrGoStateNum));
    }
}

package cn.edu.ynu.sei.lr.lr0;

public class Item extends Product
{
    public int dotPos;

    public Item(String leftPart, String rightPart, int dotPos)
    {
        super(leftPart, rightPart);
        this.dotPos = dotPos;
    }

    @Override
    public String toString()
    {
        String beforeDotPos = rightPart.substring(0, dotPos);
        String afterDotPos = rightPart.substring(dotPos, rightPart.length());
        return leftPart + "->" + beforeDotPos + "." + afterDotPos;
    }
}

package cn.edu.ynu.sei.lr.lr0;

import java.util.ArrayList;
import java.util.List;

public class ItemSet
{
    public List<Item> items = new ArrayList<Item>();


    public Item get(int i)
    {
        return items.get(i);
    }

    public void add(Item item)
    {
        items.add(item);
    }

    public void add(Product product)
    {
        Item item = new Item(product.leftPart, product.rightPart, 0);
        for (Item i: items)
        {
            if (i.leftPart.equals(item.leftPart)
                    && i.rightPart.equals(item.rightPart)
                    && i.dotPos == item.dotPos)
            {
                return;
            }
        }
        items.add(item);
    }
}

package cn.edu.ynu.sei.lr.lr0;

public class Product
{
    public String leftPart;

    public String rightPart;

    public Product(String leftPart, String rightPart)
    {
        this.leftPart = leftPart;
        this.rightPart = rightPart;
    }

    @Override
    public String toString()
    {
        return leftPart + "->" + rightPart;
    }
}

package cn.edu.ynu.sei.lr.lr0;

public class SymbolAndActOrGoStateNum
{
    public String grammaticalSymbol;

    public int ActOrGoStateNum;

    public SymbolAndActOrGoStateNum(String grammaticalSymbol,
                                     int ActOrGoStateNum)
    {
        this.grammaticalSymbol = grammaticalSymbol;
        this.ActOrGoStateNum = ActOrGoStateNum;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区丝袜| 国产精品久久久久久久久免费桃花 | 亚洲男同1069视频| 中文字幕的久久| 国产精品乱码妇女bbbb| 国产精品丝袜黑色高跟| 五月激情丁香一区二区三区| 亚洲自拍偷拍综合| 亚洲成人手机在线| 日韩影院免费视频| 久久精品国内一区二区三区| 久久不见久久见免费视频7 | 成人高清伦理免费影院在线观看| 东方aⅴ免费观看久久av| 成人av电影在线网| 91视频91自| 欧美精品日韩综合在线| 欧美肥胖老妇做爰| 国产色综合一区| 亚洲欧美一区二区三区极速播放 | 亚洲国产欧美在线| 香蕉成人啪国产精品视频综合网 | 国产精品久线在线观看| 亚洲女同一区二区| 一区二区三区在线观看动漫| 亚洲国产日韩精品| 麻豆精品一二三| 大胆欧美人体老妇| 欧美亚日韩国产aⅴ精品中极品| 欧美日韩精品一二三区| 精品国偷自产国产一区| 亚洲欧美成人一区二区三区| 亚洲bt欧美bt精品777| 欧美亚洲精品一区| 精品人在线二区三区| 欧美国产乱子伦| 日韩专区一卡二卡| www.视频一区| 欧美大片一区二区| 亚洲综合久久av| 国产成人免费xxxxxxxx| 欧美精品一二三| 国产精品毛片无遮挡高清| 亚洲午夜视频在线观看| 国产成人av电影在线播放| 欧美一区二区免费视频| 亚洲欧美日韩系列| 久久国产夜色精品鲁鲁99| 91丨porny丨户外露出| 精品乱人伦小说| 亚洲高清一区二区三区| 国产a精品视频| 精品国产亚洲一区二区三区在线观看| 亚洲精品五月天| 国产精品亚洲人在线观看| 欧美视频日韩视频在线观看| 国产精品伦一区二区三级视频| 奇米色一区二区三区四区| 精品一区二区三区免费播放| 91一区二区三区在线播放| 国产三级一区二区| 精品写真视频在线观看| 日韩欧美一区二区视频| 日韩黄色片在线观看| 欧美老肥妇做.爰bbww视频| 1024精品合集| 91美女蜜桃在线| 国产精品全国免费观看高清| 国模套图日韩精品一区二区 | 国产1区2区3区精品美女| 精品久久久久一区| 久久99国产精品尤物| 欧美α欧美αv大片| 免费美女久久99| 日韩视频中午一区| 精品无人码麻豆乱码1区2区| 欧美一级免费观看| 久久国产综合精品| 久久久www成人免费毛片麻豆| 国产精品资源站在线| 欧美国产一区二区| 色爱区综合激月婷婷| 一区二区三区视频在线看| 欧美日韩亚洲综合| 免费成人美女在线观看.| 精品国产一区二区精华| 国产91露脸合集magnet| 国产精品另类一区| 91色在线porny| 天堂久久一区二区三区| 日韩一区二区三区在线视频| 麻豆freexxxx性91精品| 精品黑人一区二区三区久久| 成人久久18免费网站麻豆| 亚洲人成小说网站色在线| 欧美主播一区二区三区美女| 日韩电影在线一区二区三区| 精品成人一区二区三区| 9人人澡人人爽人人精品| 亚洲一区二区在线视频| 日韩欧美国产系列| 欧美人狂配大交3d怪物一区| 丝袜美腿亚洲一区二区图片| 欧美一卡二卡在线观看| 国产精品久久夜| 7777精品久久久大香线蕉 | 精品久久久影院| 成人av网站在线观看| 日韩综合在线视频| 国产精品久久免费看| 欧美一区二区大片| 不卡在线视频中文字幕| 日韩国产欧美三级| 亚洲欧美在线视频观看| 日韩一二三四区| 色狠狠色狠狠综合| 国产99精品国产| 国产福利一区二区三区在线视频| 亚洲蜜臀av乱码久久精品| 精品电影一区二区| 欧美午夜精品免费| 波多野结衣中文一区| 青青草成人在线观看| 亚洲精品免费一二三区| 精品国产伦一区二区三区观看方式| 色婷婷香蕉在线一区二区| 国产精品一区二区在线观看不卡| 午夜欧美视频在线观看| 亚洲欧洲av一区二区三区久久| 久久综合九色综合欧美亚洲| 色综合久久久久综合体| 成人久久视频在线观看| 精品一区二区三区在线播放视频| 性久久久久久久久| 亚洲午夜精品17c| 亚洲丝袜制服诱惑| 亚洲欧洲另类国产综合| 国产日韩欧美精品综合| 精品国产一区二区三区久久影院| 欧美日韩卡一卡二| 欧美视频一区二区| 在线视频观看一区| 99riav久久精品riav| av亚洲精华国产精华精| 国产精品原创巨作av| 国产一区二区三区最好精华液| 美女一区二区视频| 日本美女一区二区| 日本v片在线高清不卡在线观看| 亚洲va天堂va国产va久| 亚洲一区二区三区四区五区黄| 日韩午夜电影av| 欧美夫妻性生活| 69堂国产成人免费视频| 日韩精品专区在线影院观看| 欧美日韩精品一区二区三区蜜桃| 欧美日韩一级黄| 欧美精三区欧美精三区| 日韩欧美亚洲一区二区| 久久综合九色欧美综合狠狠 | 欧美经典一区二区| 这里只有精品电影| 日韩精品一区二| 久久久不卡影院| 国产精品大尺度| 香蕉成人啪国产精品视频综合网| 日韩av电影免费观看高清完整版在线观看 | 一区二区三区欧美久久| 国产精品主播直播| 一本高清dvd不卡在线观看| 欧美日韩激情一区二区| 91精品国产综合久久精品| 精品三级av在线| 亚洲天堂网中文字| 亚洲成av人片| 国产精品 欧美精品| 成人黄色小视频在线观看| 91在线看国产| 精品视频色一区| 久久综合色之久久综合| 亚洲欧洲精品一区二区三区 | 91精品久久久久久久久99蜜臂| 日韩一区二区三区视频| 中文字幕第一区二区| 亚洲国产成人va在线观看天堂| 精品在线播放午夜| av一区二区三区黑人| 91精品国产福利在线观看| 国产精品久久夜| 日韩中文字幕区一区有砖一区| 成人黄色免费短视频| 欧美一级欧美三级在线观看| 国产精品美女视频| 久久电影网电视剧免费观看| 9i看片成人免费高清| 欧美mv日韩mv亚洲| 亚洲精品五月天| 成人av先锋影音| 日韩精品中文字幕在线一区| 欧美激情资源网|