/* Generated By:JavaCC: Do not edit this line. BattlelandRandomizerLoader.java */
package net.sf.colossus.parser;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import net.sf.colossus.variant.BattleHex;
import net.sf.colossus.variant.HazardHexside;
import net.sf.colossus.variant.HazardTerrain;
/**
* BattlelandRandomizerLoader create a randomized Battleland from a description file.
* @author Romain Dolbeau
* @version $Id: BattlelandRandomizerLoader.jj 3995 2009-04-08 14:11:43Z cleka $
* @see net.sf.colossus.variant.BattleHex
*/
@SuppressWarnings("all")
public class BattlelandRandomizerLoader implements
BattlelandRandomizerLoaderConstants
{
private static final boolean[][] show = {
{ false, false, true, true, true, false },
{ false, true, true, true, true, false },
{ false, true, true, true, true, true },
{ true, true, true, true, true, true },
{ false, true, true, true, true, true },
{ false, true, true, true, true, false } };
private static final Random rand = new net.sf.colossus.util.DevRandom();
private List<address> leftover;
private List<address> usedup;
BattleHex[][] hexes;
private String title = "Randomized!";
private String subtitle = "Randomized!";
public String getTitle()
{
return title;
}
public String getSubtitle()
{
return subtitle;
}
Hashtable<String, List<address>> labels = new Hashtable<String, List<address>>();
/* code executed just before the constructor call */
/* used to add the predefined labels to the Hashtable */
{
int i, j;
List<address> al;
al = new ArrayList<address>();
for (i = 1; i <= 4; i++)
for (j = 2; j <= 3; j++)
al.add(new address(i, j));
al.add(new address(3, 1));
for (i = 2; i <= 4; i++)
al.add(new address(i, 4));
labels.put("inside", al);
al = new ArrayList<address>();
for (i = 2; i <= 4; i++)
al.add(new address(0, i));
labels.put("leftdefenseentry", al);
al = new ArrayList<address>();
al.add(new address(3, 0));
for (i = 4; i <= 5; i++)
al.add(new address(i, 1));
labels.put("upperdefenseentry", al);
al = new ArrayList<address>();
al.add(new address(5, 4));
for (i = 3; i <= 4; i++)
al.add(new address(i, 5));
labels.put("lowerdefenseentry", al);
al = new ArrayList<address>();
for (i = 0; i < 6; i++)
for (j = 0; j < 6; j++)
if (show[i][j])
al.add(new address(i, j));
labels.put("anywhere", al);
}
private class randomHazard implements Comparable<randomHazard>
{
private final String terrain;
private final double prob;
private final double[] e_prob = new double[3];
private double percent(double val)
{
if (val < 0.)
return 0.;
if (val > 100.)
return 100.;
return val;
}
private double percent(double val, double sum)
{
return ((val * 100.) / sum);
}
randomHazard(String t)
{
terrain = t;
prob = 100.;
e_prob[0] = 100.;
e_prob[1] = 0.;
e_prob[2] = 0.;
}
randomHazard(String t, double p, int e)
{
terrain = t;
prob = percent(p);
e_prob[0] = 0.;
e_prob[1] = 0.;
e_prob[2] = 0.;
if ((e < 1) || (e > 2))
e_prob[0] = 100.;
else
e_prob[e] = 100.;
}
randomHazard(String t, double p, double p1, double p2, double p3)
{
double sum = percent(p1) + percent(p2) + percent(p3);
terrain = t;
prob = percent(p);
e_prob[0] = percent(p1, sum);
e_prob[1] = percent(p2, sum);
e_prob[2] = percent(p3, sum);
}
@Override
public String toString()
{
String s = "Hazard '" + terrain + "'";
if (prob < 100.)
s = s + " (" + prob + "%)";
s = s + " [" + e_prob[0] + "/" + e_prob[1] + "/" + e_prob[2] + "]";
return s;
}
public int compareTo(randomHazard other)
{
if (other.prob != prob)
{
return (prob > other.prob ? -1 : 1);
}
return 0;
}
}
private class address implements Comparable<address>
{
final int x;
final int y;
address(int ox, int oy)
{
x = ox;
y = oy;
}
@Override
public String toString()
{
return "(" + x + "," + y + ")";
}
public String toCaseLabel()
{
char xc = 'X';
char yc = 'X';
switch (x)
{
case 0:
xc = 'A';
yc = Integer.toString(5 - y).charAt(0);
break;
case 1:
xc = 'B';
yc = Integer.toString(5 - y).charAt(0);
break;
case 2:
xc = 'C';
yc = Integer.toString(6 - y).charAt(0);
break;
case 3:
xc = 'D';
yc = Integer.toString(6 - y).charAt(0);
break;
case 4:
xc = 'E';
yc = Integer.toString(6 - y).charAt(0);
break;
case 5:
xc = 'F';
yc = Integer.toString(5 - y).charAt(0);
break;
}
return (xc + "" + yc);
}
public int compareTo(address other)
{
if (other.x != x)
{
return (x < other.x ? -1 : 1);
}
if (other.y != y)
{
return (y < other.y ? -1 : 1);
}
return 0;
}
@Override
public boolean equals(Object o)
{
if (o == null)
return false;
if (!(o instanceof address))
return false;
address ot = (address)o;
return ((x == ot.x) && (y == ot.y));
}
}
private boolean exist(address a)
{
return (a.x >= 0) && (a.x < show.length) && (a.y >= 0)
&& (a.y < show[0].length) && (show[a.x][a.y]);
}
private class range
{
final int min;
final int max;
range(int mi, int ma)
{
min = mi;
max = ma;
}
}
private void resolveOne(BattleHex[][] h, List<address> al, randomHazard t)
{
if (al.isEmpty())
return;
double result = rand.nextDouble() * 100.;
if (result >= t.prob)
return;
int pos = rand.nextInt(al.size());
address a = al.remove(pos);
BattleHex hex = h[a.x][a.y];
hex.setTerrain(HazardTerrain.getTerrainByName(t.terrain));
result = rand.nextDouble() * 100.;
hex.setElevation(0);
if (result > t.e_prob[0])
hex.setElevation(1);
if (result > (t.e_prob[0] + t.e_prob[1]))
hex.setElevation(2);
usedup.add(a);
}
private void resolveAll(BattleHex[][] h, List<address> al,
List<randomHazard> tl)
{
usedup = new ArrayList<address>();
Iterator<randomHazard> it = tl.iterator();
while (it.hasNext())
{
randomHazard rt = it.next();
resolveOne(h, al, rt);
}
leftover = al;
}
private final Map<hazardPair, List<randomHexside>> hexsideRandomness = new TreeMap<hazardPair, List<randomHexside>>();
private class hazardPair implements Comparable<Object>
{
final String hs;
final int es;
final String hd;
final int ed;
private hazardPair(String hs, int es, String hd, int ed)
{
this.hs = hs;
this.es = es;
this.hd = hd;
this.ed = ed;
}
@Override
public boolean equals(Object o)
{
if (o == null)
return false;
if (!(o instanceof hazardPair))
return false;
hazardPair h = (hazardPair)o;
return ((hs == h.hs) && (hd == h.hd) && (es == h.es) && (ed == h.ed));
}
public int compareTo(Object o)
{
hazardPair h = (hazardPair)o;
if ((hs == h.hs) && (hd == h.hd) && (es == h.es) && (ed == h.ed))
return 0;
if (!hs.equals(h.hs))
return (hs.compareTo(h.hs));
if (!hd.equals(h.hd))
return (hd.compareTo(h.hd));
if (es != h.es)
return (es < h.es ? -1 : 1);
if (ed != h.ed)
return (ed < h.ed ? -1 : 1);
return 0;
}
@Override
public String toString()
{
return ("Pair: " + hs + "/" + (es == -1 ? "*" : "" + es) + " to "
+ hd + "/" + (ed == -1 ? "*" : "" + ed));
}
}
private class randomHexside
{
private final HazardHexside hazard;
private final double prob;
private double percent(double val)
{
if (val < 0.)
return 0.;
if (val > 100.)
return 100.;
return val;
}
@SuppressWarnings("deprecation")
randomHexside(char hChar, double p)
{
HazardHexside hObj = HazardHexside.getHexsideByCode(hChar);
hazard = hObj;
prob = percent(p);
}
HazardHexside getHexsideHazard()
{
return hazard;
}
double getProb()
{
return prob;
}
@Override
public String toString()
{
return ("HexsideHazard " + hazard + " " + (prob < 100. ? prob
+ " %" : ""));
}
}
private List<randomHexside> findHazardPairBestMatch(hazardPair p)
{
hazardPair p2;
List<randomHexside> al;
p2 = p;
al = hexsideRandomness.get(p2);
if (al != null) // exact match
return al;
p2 = new hazardPair(p.hs, p.es, p.hd, -1);
al = hexsideRandomness.get(p2);
if (al != null)
return al;
p2 = new hazardPair(p.hs, -1, p.hd, p.ed);
al = hexsideRandomness.get(p2);
if (al != null)
return al;
p2 = new hazardPair(p.hs, -1, p.hd, -1);
al = hexsideRandomness.get(p2);
if (al != null)
return al;
return null;
}
public void resolveAllHexsides(BattleHex h[][])
{
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
if (show[i][j])
{
for (int k = 0; k < 6; k++)
{
BattleHex hd = h[i][j].getNeighbor(k);
if (hd != null)
{
String ts = h[i][j].getTerrain().getName();
int es = h[i][j].getElevation();
String td = hd.getTerrain().getName();
int ed = hd.getElevation();
hazardPair hp = new hazardPair(ts, es, td, ed);
List<randomHexside> hsl = findHazardPairBestMatch(hp);
if (hsl != null)
{
boolean attributed = false;
Iterator<randomHexside> it = hsl.iterator();
while (!attributed && it.hasNext())
{
randomHexside rhs = it.next();
if ((rand.nextDouble() * 100.) < rhs
.getProb())
{
attributed = true;
h[i][j].setHexsideHazard(k, rhs
.getHexsideHazard());
}
}
}
}
}
}
}
}
if (startlistAddress != null)
{
startlist = new java.util.ArrayList<String>();
java.util.Iterator<address> it = startlistAddress.iterator();
while (it.hasNext())
{
address ad = it.next();
startlist.add(ad.toCaseLabel());
}
}
}
/** hold the list of label for the startlist */
private java.util.List<String> startlist = null;
/** hold the list of address prior resolution for the startlist */
private java.util.List<address> startlistAddress = null;
/** is the terrain a Tower ? */
private boolean isTower = false;
public java.util.List<String> getStartList()
{
return startlist;
}
public boolean isTower()
{
return isTower;
}
final public String z_comment() throws ParseException
{
jj_consume_token(COMMENT);
{
if (true)
return (new String(token.image));
}
throw new Error("Missing return statement in function");
}
final public char z_terrain() throws ParseException
{
jj_consume_token(HAZARD);
{
if (true)
return (token.image.charAt(0));
}
throw new Error("Missing return statement in function");
}
final public String z_label() throws ParseException
{
jj_consume_token(CHAINE);
{
if (true)
return new String(token.image);
}
throw new Error("Missing return statement in function");
}
final public int z_number() throws ParseException
{
if (jj_2_1(20))
{
jj_consume_token(NUMBER);
{
if (true)
return (Integer.parseInt(token.image));
}
}
else if (jj_2_2(20))
{
jj_consume_token(STAR);
{
if (true)
return (-1);
}
}
else
{
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
final public double z_fpnumber() throws ParseException
{
if (jj_2_3(20))
{
jj_consume_token(FPNUMBER);
{
if (true)
return (Double.parseDouble(token.image));
}
}
else if (jj_2_4(20))
{
jj_consume_token(STAR);
{
if (true)
return (-1);
}
}
else
{
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
final public String z_chaine() throws ParseException
{
if (jj_2_5(20))
{
jj_consume_token(CHAINE);
{
if (true)
return (new String(token.image));
}
}
else if (jj_2_6(20))
{
jj_consume_token(QUOTEDCHAINE);
String tok = new String(token.image);
String cha = tok.substring(1, tok.length() - 1);
{
if (true)
return (cha);
}
}
else
{
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
final public address z_address() throws ParseException
{
int x, y;
if (jj_2_7(20))
{
jj_consume_token(OPENPAR);
x = z_number();
jj_consume_token(COMMA);
y = z_number();
jj_consume_token(CLOSEPAR);
{
if (true)
return new address(x, y);
}
}
else if (jj_2_8(20))
{
jj_consume_token(CASELABEL);
switch (token.image.charAt(0))
{
case 'A':
case 'a':
x = 0;
break;
case 'B':
case 'b':
x = 1;
break;
case 'C':
case 'c':
x = 2;
break;
case 'D':
case 'd':
x = 3;
break;
case 'E':
case 'e':
x = 4;
break;
case 'F':
case 'f':
x = 5;
break;
default:
{
if (true)
throw new ParseException("Hex " + token.image
+ "doesn't exist");
}
}
y = 6 - Integer.parseInt(new String(token.image.substring(1)));
y = y - Math.abs(((x - 3) / 2));
{
if (true)
return new address(x, y);
}
}
else
{
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
final public range z_range() throws ParseException
{
int a, b;
a = z_number();
jj_consume_token(CARET);
b = z_number();
{
if (true)
return new range(a, b);
}
throw new Error("Missing return statement in function");
}
final public List<address> z_listAddress() throws ParseException
{
address ad;
List<address> al, al2, al3;
int x, y;
range r1, r2;
int i, j;
String s;
if (jj_2_9(20))
{
jj_consume_token(SOMEOF);
jj_consume_token(OPENPAR);
x = z_number();
jj_consume_token(COMMA);
al2 = z_listAddress();
jj_consume_token(CLOSEPAR);
al = z_listAddress();
List<address> al4 = new ArrayList<address>(al);
while (!al2.isEmpty() && (x > 0))
{
ad = al2.remove(rand.nextInt(al2.size()));
al4.add(ad);
x--;
}
{
if (true)
return al4;
}
}
else if (jj_2_10(20))
{
jj_consume_token(SUBSTRACT);
jj_consume_token(OPENPAR);
al3 = z_listAddress();
jj_consume_token(COMMA);
al2 = z_listAddress();
jj_consume_token(CLOSEPAR);
al = z_listAddress();
List<address> al4 = new ArrayList<address>(al);
Iterator<address> it = al3.iterator();
while (it.hasNext())
{
ad = it.next();
if (!(al2.contains(ad)))
{
al4.add(ad);
}
}
{
if (true)
return al4;
}
}
else if (jj_2_11(20))
{
jj_consume_token(OPENPAR);
jj_consume_token(LEFTOVER);
jj_consume_token(CLOSEPAR);
al = z_listAddress();
List<address> al4 = new ArrayList<address>(al);
if (leftover != null)
{
Iterator<address> it = leftover.iterator();
while (it.hasNext())
al4.add(it.next());
}
{
if (true)
return al4;
}
}
else if (jj_2_12(20))
{
jj_consume_token(SURROUNDINGSOF);
jj_consume_token(OPENPAR);
al2 = z_listAddress();
jj_consume_token(CLOSEPAR);
al = z_listAddress();
List<address> al4 = new ArrayList<address>(al);
if (al2 != null)
{
Set<address> tempSet = new TreeSet<address>();
Iterator<address> it = al2.iterator();
while (it.hasNext())
{
ad = it.next();
for (i = 0; i < 6; i++)
{
BattleHex hex = hexes[ad.x][ad.y].getNeighbor(i);
if (hex != null)
{
tempSet.add(new address(hex.getXCoord(), hex
.getYCoord()));
}
}
}
it = al2.iterator();
while (it.hasNext())
{
ad = it.next();
tempSet.remove(ad);
}
it = tempSet.iterator();
while (it.hasNext())
{
ad = it.next();
al4.add(ad);
}
}
{
if (true)
return al4;
}
}
else if (jj_2_13(20))
{
jj_consume_token(OPENPAR);
jj_consume_token(USEDUP);
jj_consume_token(CLOSEPAR);
al = z_listAddress();
List<address> al4 = new ArrayList<address>(al);
if (usedup != null)
{
Iterator<address> it = usedup.iterator();
while (it.hasNext())
al4.add(it.next());
}
{
if (true)
return al4;
}
}
else if (jj_2_14(20))
{
jj_consume_token(OPENPAR);
s = z_label();
jj_consume_token(CLOSEPAR);
al = z_listAddress();
List<address> al4 = new ArrayList<address>(al);
List<address> ll = labels.get(s);
if (ll != null)
{
Iterator<address> it = ll.iterator();
while (it.hasNext())
al4.add(it.next());
}
{
if (true)
return al4;
}
}
else if (jj_2_15(20))
{
ad = z_address();
al = z_listAddress();
if (exist(ad))
al.add(ad);
{
if (true)
return (al);
}
}
else if (jj_2_16(20))
{
jj_consume_token(OPENPAR);
r1 = z_range();
jj_consume_token(COMMA);
y = z_number();
jj_consume_token(CLOSEPAR);
al = z_listAddress();
for (i = r1.min; i <= r1.max; i++)
{
ad = new address(i, y);
if (exist(ad))
al.add(ad);
}
{
if (true)
return al;
}
}
else if (jj_2_17(20))
{
jj_consume_token(OPENPAR);
x = z_number();
jj_consume_token(COMMA);
r2 = z_range();
jj_consume_token(CLOSEPAR);
al = z_listAddress();
for (i = r2.min; i <= r2.max; i++)
{
ad = new address(x, i);
if (exist(ad))
al.add(ad);
}
{
if (true)
return al;
}
}
else if (jj_2_18(20))
{
jj_consume_token(OPENPAR);
r1 = z_range();
jj_consume_token(COMMA);
r2 = z_range();
jj_consume_token(CLOSEPAR);
al = z_listAddress();
for (i = r1.min; i <= r1.max; i++)
for (j = r2.min; j <= r2.max; j++)
{
ad = new address(i, j);
if (exist(ad))
al.add(ad);
}
{
if (true)
return al;
}
}
else
{
{
if (true)
return new ArrayList<address>();
}
}
throw new Error("Missing return statement in function");
}
final public List<randomHazard> z_listHazard() throws ParseException
{
String t;
int e = 0;
List<randomHazard> tl;
double p = 100.0, p1, p2, p3;
if (jj_2_22(20))
{
t = z_chaine();
if (jj_2_19(20))
{
jj_consume_token(COMMA);
p = z_fpnumber();
}
else
{
// auto generated - ignore
}
jj_consume_token(COMMA);
p1 = z_fpnumber();
jj_consume_token(COMMA);
p2 = z_fpnumber();
jj_consume_token(COMMA);
p3 = z_fpnumber();
tl = z_listHazard();
randomHazard rt = new randomHazard(t, p, p1, p2, p3);
tl.add(rt);
{
if (true)
return tl;
}
}
else if (jj_2_23(20))
{
t = z_chaine();
if (jj_2_20(20))
{
jj_consume_token(COMMA);
p = z_fpnumber();
}
else
{
// auto generated - ignore
}
if (jj_2_21(20))
{
jj_consume_token(COMMA);
e = z_number();
}
else
{
// auto generated - ignore
}
tl = z_listHazard();
randomHazard rt = new randomHazard(t, p, e);
tl.add(rt);
{
if (true)
return tl;
}
}
else
{
{
if (true)
return new ArrayList<randomHazard>();
}
}
throw new Error("Missing return statement in function");
}
final public List<randomHexside> z_listHexside() throws ParseException
{
char t;
List<randomHexside> hl;
double p = 100.0;
if (jj_2_25(20))
{
t = z_terrain();
if (jj_2_24(20))
{
jj_consume_token(COMMA);
p = z_fpnumber();
}
else
{
// auto generated - ignore
}
hl = z_listHexside();
randomHexside rh = new randomHexside(t, p);
hl.add(rh);
{
if (true)
return hl;
}
}
else
{
{
if (true)
return new ArrayList<randomHexside>();
}
}
throw new Error("Missing return statement in function");
}
final public hazardPair z_hazardPair() throws ParseException
{
String ts, td;
int es, ed;
jj_consume_token(OPENPAR);
ts = z_chaine();
jj_consume_token(COMMA);
es = z_number();
jj_consume_token(CLOSEPAR);
jj_consume_token(OPENPAR);
td = z_chaine();
jj_consume_token(COMMA);
ed = z_number();
jj_consume_token(CLOSEPAR);
{
if (true)
return new hazardPair(ts, es, td, ed);
}
throw new Error("Missing return statement in function");
}
final public int oneArea(BattleHex h[][]) throws ParseException
{
List<address> al;
List<randomHazard> tl;
List<randomHexside> tl2;
String s;
hexes = h;
hazardPair hp;
if (jj_2_26(20))
{
jj_consume_token(AREA);
al = z_listAddress();
jj_consume_token(HAZARDS);
tl = z_listHazard();
Collections.sort(al);
Collections.reverse(tl);
//System.err.println("Using area: " + al + ", terrains: " + tl);
resolveAll(h, al, tl);
//System.err.println("Usedup: " + usedup);
//System.err.println("Leftover: " + leftover);
{
if (true)
return (1);
}
}
else if (jj_2_27(20))
{
jj_consume_token(KEYLABEL);
s = z_label();
jj_consume_token(EQUAL);
al = z_listAddress();
labels.put(s, al);
{
if (true)
return (0);
}
}
else if (jj_2_28(20))
{
jj_consume_token(KEYTITLE);
s = z_chaine();
title = s;
{
if (true)
return (0);
}
}
else if (jj_2_29(20))
{
jj_consume_token(KEYSUBTITLE);
s = z_chaine();
subtitle = s;
{
if (true)
return (0);
}
}
else if (jj_2_30(20))
{
jj_consume_token(PAIR);
hp = z_hazardPair();
jj_consume_token(HEXSIDES);
tl2 = z_listHexside();
//System.out.println("For " + hp + " we'll use " + tl2);
Collections.reverse(tl2);
hexsideRandomness.put(hp, tl2);
//System.out.println("NOW: " + hexsideRandomness);
{
if (true)
return (0);
}
}
else if (jj_2_31(20))
{
jj_consume_token(TOWER);
isTower = true;
{
if (true)
return 0;
}
}
else if (jj_2_32(20))
{
jj_consume_token(STARTLIST);
al = z_listAddress();
startlistAddress = new java.util.ArrayList<address>(al);
{
if (true)
return 0;
}
}
else if (jj_2_33(20))
{
jj_consume_token(EOL);
{
if (true)
return (0);
}
}
else if (jj_2_34(20))
{
s = z_comment();
{
if (true)
return (0);
}
}
else if (jj_2_35(20))
{
jj_consume_token(0);
{
if (true)
return (-1);
}
}
else
{
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
private boolean jj_2_1(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_1();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(0, xla);
}
}
private boolean jj_2_2(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_2();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(1, xla);
}
}
private boolean jj_2_3(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_3();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(2, xla);
}
}
private boolean jj_2_4(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_4();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(3, xla);
}
}
private boolean jj_2_5(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_5();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(4, xla);
}
}
private boolean jj_2_6(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_6();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(5, xla);
}
}
private boolean jj_2_7(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_7();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(6, xla);
}
}
private boolean jj_2_8(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_8();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(7, xla);
}
}
private boolean jj_2_9(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_9();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(8, xla);
}
}
private boolean jj_2_10(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_10();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(9, xla);
}
}
private boolean jj_2_11(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_11();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(10, xla);
}
}
private boolean jj_2_12(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_12();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(11, xla);
}
}
private boolean jj_2_13(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_13();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(12, xla);
}
}
private boolean jj_2_14(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_14();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(13, xla);
}
}
private boolean jj_2_15(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_15();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(14, xla);
}
}
private boolean jj_2_16(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_16();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(15, xla);
}
}
private boolean jj_2_17(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_17();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(16, xla);
}
}
private boolean jj_2_18(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_18();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(17, xla);
}
}
private boolean jj_2_19(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_19();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(18, xla);
}
}
private boolean jj_2_20(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_20();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(19, xla);
}
}
private boolean jj_2_21(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_21();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(20, xla);
}
}
private boolean jj_2_22(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_22();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(21, xla);
}
}
private boolean jj_2_23(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_23();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(22, xla);
}
}
private boolean jj_2_24(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_24();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(23, xla);
}
}
private boolean jj_2_25(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_25();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(24, xla);
}
}
private boolean jj_2_26(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_26();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(25, xla);
}
}
private boolean jj_2_27(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_27();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(26, xla);
}
}
private boolean jj_2_28(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_28();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(27, xla);
}
}
private boolean jj_2_29(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_29();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(28, xla);
}
}
private boolean jj_2_30(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_30();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(29, xla);
}
}
private boolean jj_2_31(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_31();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(30, xla);
}
}
private boolean jj_2_32(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_32();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(31, xla);
}
}
private boolean jj_2_33(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_33();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(32, xla);
}
}
private boolean jj_2_34(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_34();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(33, xla);
}
}
private boolean jj_2_35(int xla)
{
jj_la = xla;
jj_lastpos = jj_scanpos = token;
try
{
return !jj_3_35();
}
catch (LookaheadSuccess ls)
{
return true;
}
finally
{
jj_save(34, xla);
}
}
private boolean jj_3_6()
{
if (jj_scan_token(QUOTEDCHAINE))
return true;
return false;
}
private boolean jj_3_27()
{
if (jj_scan_token(KEYLABEL))
return true;
if (jj_3R_3())
return true;
if (jj_scan_token(EQUAL))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3R_7()
{
Token xsp;
xsp = jj_scanpos;
if (jj_3_5())
{
jj_scanpos = xsp;
if (jj_3_6())
return true;
}
return false;
}
private boolean jj_3_5()
{
if (jj_scan_token(CHAINE))
return true;
return false;
}
private boolean jj_3_17()
{
if (jj_scan_token(OPENPAR))
return true;
if (jj_3R_1())
return true;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_5())
return true;
if (jj_scan_token(CLOSEPAR))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3_10()
{
if (jj_scan_token(SUBSTRACT))
return true;
if (jj_scan_token(OPENPAR))
return true;
if (jj_3R_2())
return true;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_2())
return true;
if (jj_scan_token(CLOSEPAR))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3_4()
{
if (jj_scan_token(STAR))
return true;
return false;
}
private boolean jj_3_26()
{
if (jj_scan_token(AREA))
return true;
if (jj_3R_2())
return true;
if (jj_scan_token(HAZARDS))
return true;
if (jj_3R_8())
return true;
return false;
}
private boolean jj_3R_6()
{
Token xsp;
xsp = jj_scanpos;
if (jj_3_3())
{
jj_scanpos = xsp;
if (jj_3_4())
return true;
}
return false;
}
private boolean jj_3_3()
{
if (jj_scan_token(FPNUMBER))
return true;
return false;
}
private boolean jj_3_21()
{
if (jj_scan_token(COMMA))
return true;
if (jj_3R_1())
return true;
return false;
}
private boolean jj_3_16()
{
if (jj_scan_token(OPENPAR))
return true;
if (jj_3R_5())
return true;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_1())
return true;
if (jj_scan_token(CLOSEPAR))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3_2()
{
if (jj_scan_token(STAR))
return true;
return false;
}
private boolean jj_3R_2()
{
Token xsp;
xsp = jj_scanpos;
if (jj_3_9())
{
jj_scanpos = xsp;
if (jj_3_10())
{
jj_scanpos = xsp;
if (jj_3_11())
{
jj_scanpos = xsp;
if (jj_3_12())
{
jj_scanpos = xsp;
if (jj_3_13())
{
jj_scanpos = xsp;
if (jj_3_14())
{
jj_scanpos = xsp;
if (jj_3_15())
{
jj_scanpos = xsp;
if (jj_3_16())
{
jj_scanpos = xsp;
if (jj_3_17())
{
jj_scanpos = xsp;
if (jj_3_18())
{
jj_scanpos = xsp;
if (jj_3R_13())
return true;
}
}
}
}
}
}
}
}
}
}
return false;
}
private boolean jj_3_9()
{
if (jj_scan_token(SOMEOF))
return true;
if (jj_scan_token(OPENPAR))
return true;
if (jj_3R_1())
return true;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_2())
return true;
if (jj_scan_token(CLOSEPAR))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3R_1()
{
Token xsp;
xsp = jj_scanpos;
if (jj_3_1())
{
jj_scanpos = xsp;
if (jj_3_2())
return true;
}
return false;
}
private boolean jj_3_1()
{
if (jj_scan_token(NUMBER))
return true;
return false;
}
private boolean jj_3_15()
{
if (jj_3R_4())
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3_24()
{
if (jj_scan_token(COMMA))
return true;
if (jj_3R_6())
return true;
return false;
}
private boolean jj_3R_11()
{
if (jj_scan_token(OPENPAR))
return true;
if (jj_3R_7())
return true;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_1())
return true;
if (jj_scan_token(CLOSEPAR))
return true;
if (jj_scan_token(OPENPAR))
return true;
if (jj_3R_7())
return true;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_1())
return true;
if (jj_scan_token(CLOSEPAR))
return true;
return false;
}
private boolean jj_3R_3()
{
if (jj_scan_token(CHAINE))
return true;
return false;
}
private boolean jj_3_14()
{
if (jj_scan_token(OPENPAR))
return true;
if (jj_3R_3())
return true;
if (jj_scan_token(CLOSEPAR))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3R_5()
{
if (jj_3R_1())
return true;
if (jj_scan_token(CARET))
return true;
if (jj_3R_1())
return true;
return false;
}
private boolean jj_3R_9()
{
if (jj_scan_token(HAZARD))
return true;
return false;
}
private boolean jj_3R_15()
{
return false;
}
private boolean jj_3R_10()
{
Token xsp;
xsp = jj_scanpos;
if (jj_3_25())
{
jj_scanpos = xsp;
if (jj_3R_15())
return true;
}
return false;
}
private boolean jj_3_20()
{
if (jj_scan_token(COMMA))
return true;
if (jj_3R_6())
return true;
return false;
}
private boolean jj_3_25()
{
if (jj_3R_9())
return true;
Token xsp;
xsp = jj_scanpos;
if (jj_3_24())
jj_scanpos = xsp;
if (jj_3R_10())
return true;
return false;
}
private boolean jj_3_13()
{
if (jj_scan_token(OPENPAR))
return true;
if (jj_scan_token(USEDUP))
return true;
if (jj_scan_token(CLOSEPAR))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3_19()
{
if (jj_scan_token(COMMA))
return true;
if (jj_3R_6())
return true;
return false;
}
private boolean jj_3R_14()
{
return false;
}
private boolean jj_3_35()
{
if (jj_scan_token(0))
return true;
return false;
}
private boolean jj_3_34()
{
if (jj_3R_12())
return true;
return false;
}
private boolean jj_3_23()
{
if (jj_3R_7())
return true;
Token xsp;
xsp = jj_scanpos;
if (jj_3_20())
jj_scanpos = xsp;
xsp = jj_scanpos;
if (jj_3_21())
jj_scanpos = xsp;
if (jj_3R_8())
return true;
return false;
}
private boolean jj_3_33()
{
if (jj_scan_token(EOL))
return true;
return false;
}
private boolean jj_3R_8()
{
Token xsp;
xsp = jj_scanpos;
if (jj_3_22())
{
jj_scanpos = xsp;
if (jj_3_23())
{
jj_scanpos = xsp;
if (jj_3R_14())
return true;
}
}
return false;
}
private boolean jj_3_22()
{
if (jj_3R_7())
return true;
Token xsp;
xsp = jj_scanpos;
if (jj_3_19())
jj_scanpos = xsp;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_6())
return true;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_6())
return true;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_6())
return true;
if (jj_3R_8())
return true;
return false;
}
private boolean jj_3_32()
{
if (jj_scan_token(STARTLIST))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3_31()
{
if (jj_scan_token(TOWER))
return true;
return false;
}
private boolean jj_3_8()
{
if (jj_scan_token(CASELABEL))
return true;
return false;
}
private boolean jj_3R_13()
{
return false;
}
private boolean jj_3_12()
{
if (jj_scan_token(SURROUNDINGSOF))
return true;
if (jj_scan_token(OPENPAR))
return true;
if (jj_3R_2())
return true;
if (jj_scan_token(CLOSEPAR))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3R_4()
{
Token xsp;
xsp = jj_scanpos;
if (jj_3_7())
{
jj_scanpos = xsp;
if (jj_3_8())
return true;
}
return false;
}
private boolean jj_3_7()
{
if (jj_scan_token(OPENPAR))
return true;
if (jj_3R_1())
return true;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_1())
return true;
if (jj_scan_token(CLOSEPAR))
return true;
return false;
}
private boolean jj_3_30()
{
if (jj_scan_token(PAIR))
return true;
if (jj_3R_11())
return true;
if (jj_scan_token(HEXSIDES))
return true;
if (jj_3R_10())
return true;
return false;
}
private boolean jj_3_29()
{
if (jj_scan_token(KEYSUBTITLE))
return true;
if (jj_3R_7())
return true;
return false;
}
private boolean jj_3_11()
{
if (jj_scan_token(OPENPAR))
return true;
if (jj_scan_token(LEFTOVER))
return true;
if (jj_scan_token(CLOSEPAR))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3_18()
{
if (jj_scan_token(OPENPAR))
return true;
if (jj_3R_5())
return true;
if (jj_scan_token(COMMA))
return true;
if (jj_3R_5())
return true;
if (jj_scan_token(CLOSEPAR))
return true;
if (jj_3R_2())
return true;
return false;
}
private boolean jj_3_28()
{
if (jj_scan_token(KEYTITLE))
return true;
if (jj_3R_7())
return true;
return false;
}
private boolean jj_3R_12()
{
if (jj_scan_token(COMMENT))
return true;
return false;
}
/** Generated Token Manager. */
public BattlelandRandomizerLoaderTokenManager token_source;
SimpleCharStream jj_input_stream;
/** Current token. */
public Token token;
/** Next token. */
public Token jj_nt;
private int jj_ntk;
private Token jj_scanpos, jj_lastpos;
private int jj_la;
private int jj_gen;
final private int[] jj_la1 = new int[0];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static
{
jj_la1_init_0();
jj_la1_init_1();
}
private static void jj_la1_init_0()
{
jj_la1_0 = new int[] {};
}
private static void jj_la1_init_1()
{
jj_la1_1 = new int[] {};
}
final private JJCalls[] jj_2_rtns = new JJCalls[35];
private boolean jj_rescan = false;
private int jj_gc = 0;
/** Constructor with InputStream. */
public BattlelandRandomizerLoader(java.io.InputStream stream)
{
this(stream, null);
}
/** Constructor with InputStream and supplied encoding */
public BattlelandRandomizerLoader(java.io.InputStream stream,
String encoding)
{
try
{
jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1);
}
catch (java.io.UnsupportedEncodingException e)
{
throw new RuntimeException(e);
}
token_source = new BattlelandRandomizerLoaderTokenManager(
jj_input_stream);
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 0; i++)
jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++)
jj_2_rtns[i] = new JJCalls();
}
/** Reinitialise. */
public void ReInit(java.io.InputStream stream)
{
ReInit(stream, null);
}
/** Reinitialise. */
public void ReInit(java.io.InputStream stream, String encoding)
{
try
{
jj_input_stream.ReInit(stream, encoding, 1, 1);
}
catch (java.io.UnsupportedEncodingException e)
{
throw new RuntimeException(e);
}
token_source.ReInit(jj_input_stream);
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 0; i++)
jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++)
jj_2_rtns[i] = new JJCalls();
}
/** Constructor. */
public BattlelandRandomizerLoader(java.io.Reader stream)
{
jj_input_stream = new SimpleCharStream(stream, 1, 1);
token_source = new BattlelandRandomizerLoaderTokenManager(
jj_input_stream);
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 0; i++)
jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++)
jj_2_rtns[i] = new JJCalls();
}
/** Reinitialise. */
public void ReInit(java.io.Reader stream)
{
jj_input_stream.ReInit(stream, 1, 1);
token_source.ReInit(jj_input_stream);
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 0; i++)
jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++)
jj_2_rtns[i] = new JJCalls();
}
/** Constructor with generated Token Manager. */
public BattlelandRandomizerLoader(BattlelandRandomizerLoaderTokenManager tm)
{
token_source = tm;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 0; i++)
jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++)
jj_2_rtns[i] = new JJCalls();
}
/** Reinitialise. */
public void ReInit(BattlelandRandomizerLoaderTokenManager tm)
{
token_source = tm;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 0; i++)
jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++)
jj_2_rtns[i] = new JJCalls();
}
private Token jj_consume_token(int kind) throws ParseException
{
Token oldToken;
if ((oldToken = token).next != null)
token = token.next;
else
token = token.next = token_source.getNextToken();
jj_ntk = -1;
if (token.kind == kind)
{
jj_gen++;
if (++jj_gc > 100)
{
jj_gc = 0;
for (int i = 0; i < jj_2_rtns.length; i++)
{
JJCalls c = jj_2_rtns[i];
while (c != null)
{
if (c.gen < jj_gen)
c.first = null;
c = c.next;
}
}
}
return token;
}
token = oldToken;
jj_kind = kind;
throw generateParseException();
}
static private final class LookaheadSuccess extends java.lang.Error
{
// auto generated - ignore
}
final private LookaheadSuccess jj_ls = new LookaheadSuccess();
private boolean jj_scan_token(int kind)
{
if (jj_scanpos == jj_lastpos)
{
jj_la--;
if (jj_scanpos.next == null)
{
jj_lastpos = jj_scanpos = jj_scanpos.next = token_source
.getNextToken();
}
else
{
jj_lastpos = jj_scanpos = jj_scanpos.next;
}
}
else
{
jj_scanpos = jj_scanpos.next;
}
if (jj_rescan)
{
int i = 0;
Token tok = token;
while (tok != null && tok != jj_scanpos)
{
i++;
tok = tok.next;
}
if (tok != null)
jj_add_error_token(kind, i);
}
if (jj_scanpos.kind != kind)
return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos)
throw jj_ls;
return false;
}
/** Get the next Token. */
final public Token getNextToken()
{
if (token.next != null)
token = token.next;
else
token = token.next = token_source.getNextToken();
jj_ntk = -1;
jj_gen++;
return token;
}
/** Get the specific Token. */
final public Token getToken(int index)
{
Token t = token;
for (int i = 0; i < index; i++)
{
if (t.next != null)
t = t.next;
else
t = t.next = token_source.getNextToken();
}
return t;
}
@SuppressWarnings("unused")
private int jj_ntk()
{
if ((jj_nt = token.next) == null)
jj_ntk = (token.next = token_source.getNextToken()).kind;
else
jj_ntk = jj_nt.kind;
return jj_ntk;
}
private final List<int[]> jj_expentries = new ArrayList<int[]>();
private int[] jj_expentry;
private int jj_kind = -1;
private final int[] jj_lasttokens = new int[100];
private int jj_endpos;
private void jj_add_error_token(int kind, int pos)
{
if (pos >= 100)
return;
if (pos == jj_endpos + 1)
{
jj_lasttokens[jj_endpos++] = kind;
}
else if (jj_endpos != 0)
{
jj_expentry = new int[jj_endpos];
for (int i = 0; i < jj_endpos; i++)
{
jj_expentry[i] = jj_lasttokens[i];
}
jj_entries_loop: for (Iterator<int[]> it = jj_expentries
.iterator(); it.hasNext();)
{
int[] oldentry = (it.next());
if (oldentry.length == jj_expentry.length)
{
for (int i = 0; i < jj_expentry.length; i++)
{
if (oldentry[i] != jj_expentry[i])
{
continue jj_entries_loop;
}
}
jj_expentries.add(jj_expentry);
break jj_entries_loop;
}
}
if (pos != 0)
jj_lasttokens[(jj_endpos = pos) - 1] = kind;
}
}
/** Generate ParseException. */
public ParseException generateParseException()
{
jj_expentries.clear();
boolean[] la1tokens = new boolean[38];
if (jj_kind >= 0)
{
la1tokens[jj_kind] = true;
jj_kind = -1;
}
for (int i = 0; i < 0; i++)
{
if (jj_la1[i] == jj_gen)
{
for (int j = 0; j < 32; j++)
{
if ((jj_la1_0[i] & (1 << j)) != 0)
{
la1tokens[j] = true;
}
if ((jj_la1_1[i] & (1 << j)) != 0)
{
la1tokens[32 + j] = true;
}
}
}
}
for (int i = 0; i < 38; i++)
{
if (la1tokens[i])
{
jj_expentry = new int[1];
jj_expentry[0] = i;
jj_expentries.add(jj_expentry);
}
}
jj_endpos = 0;
jj_rescan_token();
jj_add_error_token(0, 0);
int[][] exptokseq = new int[jj_expentries.size()][];
for (int i = 0; i < jj_expentries.size(); i++)
{
exptokseq[i] = jj_expentries.get(i);
}
return new ParseException(token, exptokseq, tokenImage);
}
/** Enable tracing. */
final public void enable_tracing()
{
// auto generated - ignore
}
/** Disable tracing. */
final public void disable_tracing()
{
// auto generated - ignore
}
private void jj_rescan_token()
{
jj_rescan = true;
for (int i = 0; i < 35; i++)
{
try
{
JJCalls p = jj_2_rtns[i];
do
{
if (p.gen > jj_gen)
{
jj_la = p.arg;
jj_lastpos = jj_scanpos = p.first;
switch (i)
{
case 0:
jj_3_1();
break;
case 1:
jj_3_2();
break;
case 2:
jj_3_3();
break;
case 3:
jj_3_4();
break;
case 4:
jj_3_5();
break;
case 5:
jj_3_6();
break;
case 6:
jj_3_7();
break;
case 7:
jj_3_8();
break;
case 8:
jj_3_9();
break;
case 9:
jj_3_10();
break;
case 10:
jj_3_11();
break;
case 11:
jj_3_12();
break;
case 12:
jj_3_13();
break;
case 13:
jj_3_14();
break;
case 14:
jj_3_15();
break;
case 15:
jj_3_16();
break;
case 16:
jj_3_17();
break;
case 17:
jj_3_18();
break;
case 18:
jj_3_19();
break;
case 19:
jj_3_20();
break;
case 20:
jj_3_21();
break;
case 21:
jj_3_22();
break;
case 22:
jj_3_23();
break;
case 23:
jj_3_24();
break;
case 24:
jj_3_25();
break;
case 25:
jj_3_26();
break;
case 26:
jj_3_27();
break;
case 27:
jj_3_28();
break;
case 28:
jj_3_29();
break;
case 29:
jj_3_30();
break;
case 30:
jj_3_31();
break;
case 31:
jj_3_32();
break;
case 32:
jj_3_33();
break;
case 33:
jj_3_34();
break;
case 34:
jj_3_35();
break;
}
}
p = p.next;
}
while (p != null);
}
catch (LookaheadSuccess ls)
{
// auto generated - ignore
}
}
jj_rescan = false;
}
private void jj_save(int index, int xla)
{
JJCalls p = jj_2_rtns[index];
while (p.gen > jj_gen)
{
if (p.next == null)
{
p = p.next = new JJCalls();
break;
}
p = p.next;
}
p.gen = jj_gen + xla - jj_la;
p.first = token;
p.arg = xla;
}
static final class JJCalls
{
int gen;
Token first;
int arg;
JJCalls next;
}
}