lr1item.java

来自「有关编译器的编译器.」· Java 代码 · 共 101 行

JAVA
101
字号
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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.*;final class LR1Item implements Cloneable, Comparable{  final LR0Item lr0Item;  final int terminal;  LR1Item(LR0Item lr0Item, int terminal)  {    this.lr0Item = lr0Item;    this.terminal = terminal;  }  public Object clone()  {    return new LR1Item(lr0Item, terminal);  }  public boolean equals(Object obj)  {    if((obj == null) ||        (obj.getClass() != this.getClass()))    {      return false;    }    LR1Item item = (LR1Item) obj;    return (item.lr0Item.equals(lr0Item)) &&           (item.terminal == terminal);  }  public int hashCode()  {    return lr0Item.hashCode() * (terminal + 1) * 37;  }  public String toString()  {    return lr0Item + ":" + Symbol.symbol(terminal, true);  }  public String toString(Symbol lookahead)  {    // two cases:    // (1) we are facing a reduction, and the lookahed    //     should match    // (2) we are in the middle of a production.  The    //     next element should match.    Symbol[] rightside = Production.production(lr0Item.production).rightside();    if(lr0Item.position == rightside.length)    {      Symbol term = Symbol.symbol(terminal, true);      if(term == lookahead)      {        return lr0Item + " followed by " + term + " (reduce)";      }      else      {        return null;      }    }    if(rightside[lr0Item.position] == lookahead)    {      return lr0Item + " (shift)";    }    else    {      return null;    }  }  public int compareTo(Object object)  {    LR1Item item = (LR1Item) object;    int result = lr0Item.compareTo(item.lr0Item);    if(result == 0)    {      result = terminal - item.terminal;    }    return result;  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?