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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? genparser.java

?? 有關(guān)編譯器的編譯器.
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * This file is part of SableCC.                             * * See the file "LICENSE" for copyright information and the  * * terms and conditions for copying, distribution and        * * modification of SableCC.                                  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */package org.sablecc.sablecc;import java.util.*;import org.sablecc.sablecc.analysis.*;import org.sablecc.sablecc.node.*;import java.io.*;import org.sablecc.sablecc.Grammar;import java.util.Vector;import java.util.Enumeration;public class GenParser extends DepthFirstAdapter{  private MacroExpander macros;  private ResolveIds ids;  private File pkgDir;  private String pkgName;  private String currentProd;  private int currentAlt;  private boolean hasProductions;  static final int NONE = 0;  static final int STAR = 1;  static final int QMARK = 2;  static final int PLUS = 3;  int count;  int elem;  Map alts = new TypedTreeMap(               StringComparator.instance,               StringCast.instance,               NodeCast.instance);  public GenParser(ResolveIds ids)  {    this.ids = ids;    try    {      macros = new MacroExpander(                 new InputStreamReader(                   getClass().getResourceAsStream("parser.txt")));    }    catch(IOException e)    {      throw new RuntimeException("unable to open parser.txt.");    }    pkgDir = new File(ids.pkgDir, "parser");    pkgName = ids.pkgName.equals("") ? "parser" : ids.pkgName + ".parser";    if(!pkgDir.exists())    {      if(!pkgDir.mkdir())      {        throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());      }    }  }  public void caseStart(Start tree)  {    tree.apply(new DepthFirstAdapter()               {                 private boolean hasAlternative;                 public void caseATokenDef(ATokenDef node)                 {                   String name = (String) ids.names.get(node);                   String errorName = (String) ids.errorNames.get(node);                   if(!ids.ignTokens.containsKey(name))                   {                     Grammar.addTerminal(name, errorName);                   }                 }                 public void inAProd(AProd node)                 {                   hasAlternative = false;                 }                 public void inAParsedAlt(AParsedAlt node)                 {                   hasAlternative = true;                 }                 public void outAProd(AProd node)                 {                   if(hasAlternative)                   {                     Grammar.addNonterminal((String) ids.names.get(node));                   }                 }               }              );    tree.getPGrammar().apply(this);    if(!hasProductions)    {      return;    }    Grammar.computeLALR();    createParser();    createParserException();    createState();    createTokenIndex();  }  public void inAProd(AProd node)  {    hasProductions = true;    currentProd = (String) ids.names.get(node);  }  public void caseAParsedAlt(AParsedAlt node)  {    count = 1;    node.apply(new DepthFirstAdapter()               {                 public void inAElem(AElem node)                 {                   GenParser.this.setOut(node, new Integer(NONE));                 }                 public void caseAStarUnOp(AStarUnOp node)                 {                   count *= 2;                   GenParser.this.setOut(node.parent(), new Integer(STAR));                 }                 public void caseAQMarkUnOp(AQMarkUnOp node)                 {                   count *= 2;                   GenParser.this.setOut(node.parent(), new Integer(QMARK));                 }                 public void caseAPlusUnOp(APlusUnOp node)                 {                   GenParser.this.setOut(node.parent(), new Integer(PLUS));                 }               }              );    if(count == 1)    {      alts.put(ids.names.get(node), node);      currentAlt = Grammar.addProduction(currentProd, (String) ids.names.get(node));      {        Object temp[] = node.getElems().toArray();        for(int i = 0; i < temp.length; i++)        {          ((PElem) temp[i]).apply(this);        }      }    }    else    {      int max = count;      for(count = 0; count < max; count++)      {        elem = 0;        alts.put(          "X" + (count + 1) + (String) ids.names.get(node),          node);        currentAlt = Grammar.addProduction(currentProd,                                           "X" + (count + 1) + (String) ids.names.get(node));        {          Object temp[] = node.getElems().toArray();          for(int i = 0; i < temp.length; i++)          {            ((PElem) temp[i]).apply(this);          }        }      }    }  }  public void caseAElem(AElem node)  {    int op = ((Integer) getOut(node)).intValue();    String name = (String) ids.elemTypes.get(node);    switch(op)    {    case NONE:      {        Grammar.addSymbolToProduction(name, currentAlt);      }      break;    case STAR:      {        //                System.out.println("Star:" + count + ", " + (1 << elem));        if((count & (1 << elem)) != 0)        {          //                    System.out.println("yes");          try          {            Grammar.addNonterminal("X" + name);            int alt = Grammar.addProduction("X" + name, "X1" + name);            Grammar.addSymbolToProduction("X" + name, alt);            Grammar.addSymbolToProduction(name, alt);            alt = Grammar.addProduction("X" + name, "X2" + name);            Grammar.addSymbolToProduction(name, alt);          }          catch(Exception e)          {}          Grammar.addSymbolToProduction("X" + name, currentAlt);        }        elem++;      }      break;    case QMARK:      {        if((count & (1 << elem)) != 0)        {          Grammar.addSymbolToProduction(name, currentAlt);        }        elem++;      }      break;    case PLUS:      {        try        {          Grammar.addNonterminal("X" + name);          int alt = Grammar.addProduction("X" + name, "X1" + name);          Grammar.addSymbolToProduction("X" + name, alt);          Grammar.addSymbolToProduction(name, alt);          alt = Grammar.addProduction("X" + name, "X2" + name);          Grammar.addSymbolToProduction(name, alt);        }        catch(Exception e)        {}        Grammar.addSymbolToProduction("X" + name, currentAlt);      }      break;    }  }  public void caseAIgnoredAlt(AIgnoredAlt node)  {}  private void createParser()  {    BufferedWriter file;    try    {      file = new BufferedWriter(               new FileWriter(                 new File(pkgDir, "Parser.java")));    }    catch(IOException e)    {      throw new RuntimeException("Unable to create " + new File(pkgDir, "Parser.java").getAbsolutePath());    }    try    {      Symbol[] terminals = Symbol.terminals();      Symbol[] nonterminals = Symbol.nonterminals();      Production[] productions = Production.productions();      macros.apply(file, "ParserHeader", new String[] {pkgName,                   ids.pkgName.equals("") ? "lexer" : ids.pkgName + ".lexer",                   ids.pkgName.equals("") ? "node" : ids.pkgName + ".node",                   ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis"});      for(int i = 0; i < (productions.length - 1); i++)      {        Node node = (Node) alts.get(productions[i].name);        if(node == null)        {          macros.apply(file, "ParserReduceNoFilter", new String[] {                         "" + productions[i].index,                         "" + productions[i].leftside});        }        else        {          macros.apply(file, "ParserReduceFilter", new String[] {                         "" + productions[i].index,                         "" + productions[i].leftside});        }      }      {        Symbol[] rightside = productions[productions.length - 1].rightside();        macros.apply(file, "ParserParseTail", new String[] {rightside[0].name});      }      for(int i = 0; i < (productions.length - 1); i++)      {        macros.apply(file, "ParserNewHeader",                     new String[] {"" + productions[i].index});        Node node = (Node) alts.get(productions[i].name);        if(node == null)        {          Symbol[] rightside = productions[i].rightside();          for(int k = rightside.length - 1; k >= 0; k--)          {            macros.apply(file, "ParserNewBodyDecl",                         new String[] {rightside[k].name, "" + (k + 1)});          }          macros.apply(file, "ParserNewBodyNew",                       new String[] {productions[i].name});          for(int k = 0; k < rightside.length; k++)          {            macros.apply(file, "ParserNewBodyParams",                         new String[] {(k == 0) ? "" : ", ",                                       (k + 1) + ""});          }          macros.apply(file, "ParserNewTail", new String[] { "" + productions[i].leftside});        }        else        {          count = count(productions[i].name) - 1;          elem = 0;          final BufferedWriter finalFile = file;          final LinkedList stack = new LinkedList();          node.apply(new DepthFirstAdapter()                     {                       private int current;                       public void caseAElem(AElem node)                       {                         int op = ((Integer) GenParser.this.getOut(node)).intValue();                         String name = (String) ids.elemTypes.get(node);                         current++;                         switch(op)                         {                         case NONE:                           {                             stack.addFirst(new Element("ParserNewBodyDecl",                                                        new String[] {name, "" + current}));                           }                           break;                         case STAR:                           {                             if((count & (1 << elem)) != 0)                             {                               stack.addFirst(new Element("ParserNewBodyDecl",                                                          new String[] {"X" + name, "" + current}));                             }                             else                             {                               stack.addFirst(new Element("ParserNewBodyDeclNull",                                                          new String[] {"X" + name, "" + current}));                             }                             elem++;                           }                           break;                         case QMARK:                           {                             if((count & (1 << elem)) != 0)                             {                               stack.addFirst(new Element("ParserNewBodyDecl",                                                          new String[] {name, "" + current}));                             }                             else                             {                               stack.addFirst(new Element("ParserNewBodyDeclNull",                                                          new String[] {name, "" + current}));                             }                             elem++;                           }                           break;                         case PLUS:                           {                             stack.addFirst(new Element("ParserNewBodyDecl",                                                        new String[] {"X" + name, "" + current}));                           }                           break;                         }                       }                     }                    );          try          {            for(Iterator it = stack.iterator(); it.hasNext();)            {              Element e = (Element) it.next();              macros.apply(file, e.macro, e.arguments);            }          }          catch(IOException e)          {            throw new RuntimeException("An error occured while writing to " +                                       new File(pkgDir, "Parser.java").getAbsolutePath());          }          macros.apply(file, "ParserNewBodyNew",                       new String[] {                         (node == null) ? productions[i].name : name(productions[i].name)});          node.apply(new DepthFirstAdapter()                     {                       private int current;                       public void caseAElem(AElem node)                       {                         try                         {                           String name = (String) ids.elemTypes.get(node);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产情人综合久久777777| 加勒比av一区二区| 欧美日韩性生活| 青青草伊人久久| 国产色91在线| 色狠狠综合天天综合综合| 亚洲午夜久久久久中文字幕久| 欧美成人综合网站| 精品久久久久久久久久久久久久久 | 亚洲成av人片在线| 亚洲欧美日韩小说| 亚洲成人福利片| 日韩精品一区二区在线观看| 国产成人精品影视| 91免费国产在线| 在线欧美日韩精品| 欧美日韩国产高清一区二区三区 | 国产精品白丝av| 自拍偷拍欧美激情| 欧美一区二区三区小说| 色噜噜狠狠成人网p站| 精彩视频一区二区| 久久精品人人做人人综合| 欧美视频在线一区二区三区| 欧美激情在线一区二区| 日韩一区二区三区精品视频| 欧美日韩精品专区| 99精品一区二区| 日韩精品电影在线| 午夜欧美在线一二页| 综合欧美一区二区三区| 亚洲成av人片| 欧美r级在线观看| 欧美亚洲高清一区二区三区不卡| 国产精品99久久久久久似苏梦涵| 色国产综合视频| 日韩手机在线导航| 99综合影院在线| 欧美精品一区二区不卡| 欧美国产成人精品| 亚洲精品一区二区三区在线观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美日韩国产乱码电影| 一区二区三区视频在线看| 国产成人av电影在线| 蜜桃av噜噜一区二区三区小说| 欧美一级高清片在线观看| 久久国产麻豆精品| 另类欧美日韩国产在线| 一区二区三区欧美久久| 国产精品情趣视频| 91丝袜国产在线播放| 亚洲国产高清aⅴ视频| 欧美精品粉嫩高潮一区二区| 国产在线精品一区二区夜色| 91网站最新地址| 精品欧美黑人一区二区三区| 国产一区二区免费看| 福利一区二区在线| 人人精品人人爱| 偷偷要91色婷婷| 在线免费视频一区二区| 国产午夜精品一区二区三区四区| 欧美老肥妇做.爰bbww| 蜜臀精品久久久久久蜜臀| 在线播放/欧美激情| 在线观看网站黄不卡| 亚洲人成网站影音先锋播放| 国内精品久久久久影院薰衣草| 欧美视频一二三区| 国产一区二区福利| 成人午夜免费视频| 日本韩国一区二区三区| va亚洲va日韩不卡在线观看| 欧美一区午夜视频在线观看 | 欧美午夜一区二区| 在线观看免费成人| 日韩一区二区视频在线观看| 视频一区视频二区中文字幕| 色一情一伦一子一伦一区| 欧美成人国产一区二区| 日韩精品成人一区二区在线| 欧美日韩一区二区电影| 久久精品国产99国产精品| 国产激情视频一区二区三区欧美| 欧美激情一区二区三区| 91麻豆.com| www.性欧美| 欧洲国产伦久久久久久久| 欧美一级精品大片| 国产一区二区在线观看免费| 欧美一区二区三区喷汁尤物| 日韩色在线观看| 欧美不卡一区二区三区四区| 日韩一区二区三区在线| 欧美va亚洲va在线观看蝴蝶网| 一区二区三区四区乱视频| 日本最新不卡在线| 欧美一区二区视频免费观看| 亚洲韩国精品一区| 欧美四级电影网| 亚洲欧洲制服丝袜| 一区二区三区在线看| 日本成人在线一区| 亚洲一区二区三区视频在线播放| 懂色中文一区二区在线播放| 亚洲精品中文在线| 在线观看日产精品| 亚洲人妖av一区二区| 成人免费视频网站在线观看| 日韩欧美国产1| 高清beeg欧美| 亚洲色图欧美激情| 成人黄动漫网站免费app| 一区二区三区久久| 555www色欧美视频| 丝袜美腿亚洲一区二区图片| 欧美少妇xxx| 国产精品99久久不卡二区| 亚洲精品免费在线播放| 精品粉嫩超白一线天av| 欧美亚洲国产怡红院影院| 蜜桃视频在线观看一区| 国产人妖乱国产精品人妖| 91精品一区二区三区在线观看| 国产综合久久久久影院| 天堂成人国产精品一区| 综合久久久久久久| 精品国产髙清在线看国产毛片| 色老汉一区二区三区| 成人av在线一区二区三区| 免费高清在线一区| 亚洲亚洲人成综合网络| 中文字幕日本乱码精品影院| 久久久三级国产网站| 4438成人网| 欧美视频在线观看一区| 久久99久久99精品免视看婷婷| 亚洲乱码国产乱码精品精可以看 | 中文字幕一区二区三区蜜月| 91麻豆精品在线观看| 国产精品资源在线看| 亚洲在线中文字幕| 久久综合久久综合久久| 色婷婷精品大视频在线蜜桃视频| 国产麻豆精品95视频| 亚洲一区av在线| 久久九九久久九九| 欧美日韩午夜影院| 国产91丝袜在线播放九色| 亚洲午夜免费电影| 久久欧美一区二区| 欧美一区三区四区| 欧美日韩综合在线免费观看| 成人黄色电影在线 | 69久久夜色精品国产69蝌蚪网| 国产一区二区三区观看| 午夜精品视频一区| 亚洲精品乱码久久久久| 欧美aⅴ一区二区三区视频| 亚洲一区二区精品3399| 一区在线播放视频| 欧美一区二区美女| 亚洲精品在线三区| 欧美日韩国产成人在线91| 色视频一区二区| 波多野结衣精品在线| 99久久精品久久久久久清纯| 国产精品一区二区免费不卡| 精品制服美女丁香| 日本少妇一区二区| 久久99久久精品| 久久精品99久久久| 日韩不卡手机在线v区| 亚洲欧美激情小说另类| 丝袜美腿亚洲色图| 日本人妖一区二区| 日韩国产精品久久久| 一区二区三区视频在线看| 日韩精品午夜视频| 日本不卡不码高清免费观看| 欧美96一区二区免费视频| 麻豆国产精品官网| 国产精品亚洲成人| 大胆亚洲人体视频| 色综合久久久久综合体桃花网| 国产精品中文欧美| 成人精品免费网站| 色综合久久久久综合99| 欧美日韩极品在线观看一区| 欧美一区二区三区电影| 欧美电影免费观看高清完整版| 国产亚洲一区二区三区在线观看 | 精彩视频一区二区| 乱一区二区av| 成人夜色视频网站在线观看| eeuss国产一区二区三区| 91色porny蝌蚪| 欧美日韩视频在线第一区| 精品嫩草影院久久|