Listing 2: DFATable.java
package org.ananas.hc.compiler;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import org.ananas.hc.QName;
public class DFATable
{
public Map symbols;
public int[][] dtran;
public Object[] astate;
public DFATable(QName[] qnames,int[][] dtran,Object[] astate)
{
symbols = new HashMap();
for(int i = 0;i < qnames.length;i++)
symbols.put(qnames[i],new Integer(i));
this.dtran = dtran;
this.astate = astate;
}
public int move(QName qname,int state)
{
Integer key = (Integer)symbols.get(qname);
if(key != null)
return dtran[state < 0 ? 0 : state][key.intValue()];
else
return -1;
}
public boolean isAcceptingState(int state)
{
return state < 0 ? false : astate[state] != null;
}
public Object getAssociatedData(int state)
{
return state < 0 ? null : astate[state];
}
public String toString()
{
StringBuffer buffer = new StringBuffer();
Iterator iterator = symbols.entrySet().iterator();
while(iterator.hasNext())
{
Map.Entry entry = (Map.Entry)iterator.next();
buffer.append('#');
buffer.append(entry.getValue().toString());
buffer.append(' ');
buffer.append(entry.getKey().toString());
buffer.append('\n');
}
for(int i = 0;i < dtran.length;i++)
{
for(int j = 0;j < dtran[i].length;j++)
{
String st = Integer.toString(dtran[i][j]);
for(int z = 0;z < 4 - st.length();z++)
buffer.append(' ');
buffer.append(dtran[i][j]);
}
buffer.append('\n');
}
for(int i = 0;i < astate.length;i++)
{
buffer.append('#');
buffer.append(i);
buffer.append(' ');
buffer.append(astate.toString());
buffer.append('\n');
}
return buffer.toString();
}
}
|