/****************************************************************************
* Copyright (c) 2005, 2010 Jan S. Rellermeyer, Systems Group,
* Department of Computer Science, ETH Zurich and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Alexander Kuppe - initial API and implementation
*
*****************************************************************************/
/* -----------------------------------------------------------------------------
* Parser.java
* -----------------------------------------------------------------------------
*
* Producer : com.parse2.aparse.Parser 0.5
* Produced : Tue Dec 02 14:25:41 CET 2008
*
* -----------------------------------------------------------------------------
*/
package ch.ethz.iks.slp.impl.attr.gen;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.Stack;
import java.util.Iterator;
import java.util.Properties;
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.IOException;
public class Parser
{
static public void main(String[] args)
{
Properties arguments = new Properties();
String error = "";
boolean ok = args.length > 0;
if (ok)
{
arguments.setProperty("Trace", "Off");
arguments.setProperty("Rule", "attr-list");
for (int i = 0; i < args.length; i++)
{
if (args[i].equals("-trace"))
arguments.setProperty("Trace", "On");
else if (args[i].equals("-visitor"))
arguments.setProperty("Visitor", args[++i]);
else if (args[i].equals("-file"))
arguments.setProperty("File", args[++i]);
else if (args[i].equals("-string"))
arguments.setProperty("String", args[++i]);
else if (args[i].equals("-rule"))
arguments.setProperty("Rule", args[++i]);
else
{
error = "unknown argument: " + args[i];
ok = false;
}
}
}
if (ok)
{
if (arguments.getProperty("File") == null &&
arguments.getProperty("String") == null)
{
error = "insufficient arguments: -file or -string required";
ok = false;
}
}
if (!ok)
{
System.out.println("error: " + error);
System.out.println("usage: Parser [-rule rulename] [-trace] <-file file | -string string> [-visitor visitor]");
}
else
{
try
{
Parser parser = new Parser();
Rule rule = null;
parser.traceOff();
if (arguments.getProperty("Trace").equals("On")) parser.traceOn();
if (arguments.getProperty("File") != null)
rule = parser.parse(arguments.getProperty("Rule"), new File(arguments.getProperty("File")));
else if (arguments.getProperty("String") != null)
rule = parser.parse(arguments.getProperty("Rule"), arguments.getProperty("String"));
if (arguments.getProperty("Visitor") != null)
{
Visitor visitor =
(Visitor)Class.forName(arguments.getProperty("Visitor")).newInstance();
visitor.visit(rule);
}
}
catch (IllegalArgumentException e)
{
System.out.println("argument error: " + e.getMessage());
}
catch (IOException e)
{
System.out.println("io error: " + e.getMessage());
}
catch (ParserException e)
{
System.out.println("parser error: " + e.getMessage());
}
catch (ClassNotFoundException e)
{
System.out.println("visitor error: class not found - " + e.getMessage());
}
catch (IllegalAccessException e)
{
System.out.println("visitor error: illegal access - " + e.getMessage());
}
catch (InstantiationException e)
{
System.out.println("visitor error: instantiation failure - " + e.getMessage());
}
}
}
/* ---------------------------------------------------------------------------
* public parsers
* ---------------------------------------------------------------------------
*/
public Rule parse(String rulename, String string)
throws IllegalArgumentException,
ParserException
{
if (rulename == null)
throw new IllegalArgumentException("null rulename");
if (string == null)
throw new IllegalArgumentException("null string");
return decode(rulename, string);
}
public Rule parse(String rulename, InputStream in)
throws IllegalArgumentException,
IOException,
ParserException
{
if (rulename == null)
throw new IllegalArgumentException("null rulename");
if (in == null)
throw new IllegalArgumentException("null input stream");
int ch = 0;
StringBuffer out = new StringBuffer();
while ((ch = in.read()) != -1)
out.append((char)ch);
return decode(rulename, out.toString());
}
public Rule parse(String rulename, File file)
throws IllegalArgumentException,
IOException,
ParserException
{
if (rulename == null)
throw new IllegalArgumentException("null rulename");
if (file == null)
throw new IllegalArgumentException("null file");
BufferedReader in = new BufferedReader(new FileReader(file));
int ch = 0;
StringBuffer out = new StringBuffer();
while ((ch = in.read()) != -1)
out.append((char)ch);
in.close();
return decode(rulename, out.toString());
}
/* ---------------------------------------------------------------------------
* private data
* ---------------------------------------------------------------------------
*/
private String text;
private int index = 0;
private boolean trace = false;
private int level = 0;
private int error = -1;
private Stack callStack = new Stack();
private Stack errorStack = new Stack();
static final private String newline = System.getProperty("line.separator", "\n");
/* ---------------------------------------------------------------------------
* private trace
* ---------------------------------------------------------------------------
*/
private void traceOn() {trace = true;}
private void traceOff() {trace = false;}
private void push(String function)
{
callStack.push(function);
if (trace)
{
System.out.println("-> " + ++level + ": " + function + "()");
System.out.println(index + ": " + text.substring(index, index + 10 > text.length() ? text.length() : index + 10).replaceAll("[^\\p{Print}]", " "));
}
}
private void push(String function, String regex)
{
callStack.push(function);
if (trace)
{
System.out.println("-> " + ++level + ": " + function + "(" + regex + ")");
System.out.println(index + ": " + text.substring(index, index + 10 > text.length() ? text.length() : index + 10).replaceAll("[^\\p{Print}]", " "));
}
}
private void push(String function, String spelling, String regex)
{
callStack.push(function);
if (trace)
{
System.out.println("-> " + ++level + ": " + function + "(" + spelling + ", " + regex + ")");
System.out.println(index + ": " + text.substring(index, index + 10 > text.length() ? text.length() : index + 10).replaceAll("[^\\p{Print}]", " "));
}
}
private void pop(String function, boolean result, int length)
{
callStack.pop();
if (trace)
{
System.out.println("<- " + level-- + ": " + function + "(" + (result ? "true," : "false,") + length + ")");
}
if (!result)
{
if (index > error)
{
error = index;
errorStack = new Stack();
errorStack.addAll(callStack);
}
}
else
{
if (index > error) error = -1;
}
}
/* ---------------------------------------------------------------------------
* private decoders
* ---------------------------------------------------------------------------
*/
private Rule decode(String rulename, String text)
throws ParserException
{
this.text = text;
Rule rule = null;
if (rulename.equalsIgnoreCase("attr-list")) rule = decode_attr_list();
else if (rulename.equalsIgnoreCase("attribute")) rule = decode_attribute();
else if (rulename.equalsIgnoreCase("attr-val-list")) rule = decode_attr_val_list();
else if (rulename.equalsIgnoreCase("attr-tag")) rule = decode_attr_tag();
else if (rulename.equalsIgnoreCase("attr-val")) rule = decode_attr_val();
else if (rulename.equalsIgnoreCase("intval")) rule = decode_intval();
else if (rulename.equalsIgnoreCase("strval")) rule = decode_strval();
else if (rulename.equalsIgnoreCase("boolval")) rule = decode_boolval();
else if (rulename.equalsIgnoreCase("opaque")) rule = decode_opaque();
else if (rulename.equalsIgnoreCase("safe-val")) rule = decode_safe_val();
else if (rulename.equalsIgnoreCase("safe-tag")) rule = decode_safe_tag();
else if (rulename.equalsIgnoreCase("escape-val")) rule = decode_escape_val();
else if (rulename.equalsIgnoreCase("DIGIT")) rule = decode_DIGIT();
else if (rulename.equalsIgnoreCase("HEXDIG")) rule = decode_HEXDIG();
else throw new IllegalArgumentException("unknown rule");
if (rule == null)
{
String marker = " ";
StringBuffer errorBuffer = new StringBuffer();
int start = (error < 30) ? 0: error - 30;
int end = (text.length() < error + 30) ? text.length() : error + 30;
errorBuffer.append("rule \"" + (String)errorStack.peek() + "\" failed" + newline);
errorBuffer.append(text.substring(start, end).replaceAll("[^\\p{Print}]", " ") + newline);
errorBuffer.append(marker.substring(0, error < 30 ? error : 30) + "^" + newline);
errorBuffer.append("rule stack:");
for (Iterator i = errorStack.iterator(); i.hasNext();)
errorBuffer.append(newline + " " + (String)i.next());
throw new ParserException(errorBuffer.toString());
}
if (text.length() > index)
{
String marker = " ";
StringBuffer errorBuffer = new StringBuffer();
int start = (index < 30) ? 0: index - 30;
int end = (text.length() < index + 30) ? text.length(): index + 30;
errorBuffer.append("extra data found" + newline);
errorBuffer.append(text.substring(start, end).replaceAll("[^\\p{Print}]", " ") + newline);
errorBuffer.append(marker.substring(0, index < 30 ? index : 30) + "^" + newline);
throw new ParserException(errorBuffer.toString(), rule);
}
return rule;
}
private attr_list decode_attr_list()
{
push("attr-list");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_attribute();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue(",");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_attr_list();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_attribute();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new attr_list(text.substring(s0, index), e0);
else
index = s0;
pop("attr-list", decoded, index - s0);
return (attr_list)rule;
}
private attribute decode_attribute()
{
push("attribute");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("(");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_attr_tag();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("=");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_attr_val_list();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue(")");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_attr_tag();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new attribute(text.substring(s0, index), e0);
else
index = s0;
pop("attribute", decoded, index - s0);
return (attribute)rule;
}
private attr_val_list decode_attr_val_list()
{
push("attr-val-list");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_attr_val();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue(",");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_attr_val_list();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_attr_val();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new attr_val_list(text.substring(s0, index), e0);
else
index = s0;
pop("attr-val-list", decoded, index - s0);
return (attr_val_list)rule;
}
private attr_tag decode_attr_tag()
{
push("attr-tag");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_safe_tag();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
while (f1)
{
rule = decode_safe_tag();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 >= 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new attr_tag(text.substring(s0, index), e0);
else
index = s0;
pop("attr-tag", decoded, index - s0);
return (attr_tag)rule;
}
private attr_val decode_attr_val()
{
push("attr-val");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_intval();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_strval();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_boolval();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_opaque();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new attr_val(text.substring(s0, index), e0);
else
index = s0;
pop("attr-val", decoded, index - s0);
return (attr_val)rule;
}
private intval decode_intval()
{
push("intval");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("-");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_DIGIT();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
while (f1)
{
rule = decode_DIGIT();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 >= 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new intval(text.substring(s0, index), e0);
else
index = s0;
pop("intval", decoded, index - s0);
return (intval)rule;
}
private strval decode_strval()
{
push("strval");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_safe_val();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
while (f1)
{
rule = decode_safe_val();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 >= 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new strval(text.substring(s0, index), e0);
else
index = s0;
pop("strval", decoded, index - s0);
return (strval)rule;
}
private boolval decode_boolval()
{
push("boolval");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("true");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("false");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new boolval(text.substring(s0, index), e0);
else
index = s0;
pop("boolval", decoded, index - s0);
return (boolval)rule;
}
private opaque decode_opaque()
{
push("opaque");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("\\FF");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_escape_val();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
while (f1)
{
rule = decode_escape_val();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 >= 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new opaque(text.substring(s0, index), e0);
else
index = s0;
pop("opaque", decoded, index - s0);
return (opaque)rule;
}
private safe_val decode_safe_val()
{
push("safe-val");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x20", "[\\x20]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x22-27", "[\\x22-\\x27]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x2A-2B", "[\\x2A-\\x2B]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x2D-3B", "[\\x2D-\\x3B]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x3F-5B", "[\\x3F-\\x5B]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x5D-7D", "[\\x5D-\\x7D]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new safe_val(text.substring(s0, index), e0);
else
index = s0;
pop("safe-val", decoded, index - s0);
return (safe_val)rule;
}
private safe_tag decode_safe_tag()
{
push("safe-tag");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x20", "[\\x20]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x22-27", "[\\x22-\\x27]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x2B", "[\\x2B]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x2D-3B", "[\\x2D-\\x3B]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x3F-5B", "[\\x3F-\\x5B]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x5D-5E", "[\\x5D-\\x5E]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x60-7D", "[\\x60-\\x7D]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new safe_tag(text.substring(s0, index), e0);
else
index = s0;
pop("safe-tag", decoded, index - s0);
return (safe_tag)rule;
}
private escape_val decode_escape_val()
{
push("escape-val");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("\\");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_HEXDIG();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_HEXDIG();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new escape_val(text.substring(s0, index), e0);
else
index = s0;
pop("escape-val", decoded, index - s0);
return (escape_val)rule;
}
private DIGIT decode_DIGIT()
{
push("DIGIT");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_NumericValue("%x30-39", "[\\x30-\\x39]", 1);
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new DIGIT(text.substring(s0, index), e0);
else
index = s0;
pop("DIGIT", decoded, index - s0);
return (DIGIT)rule;
}
private HEXDIG decode_HEXDIG()
{
push("HEXDIG");
boolean decoded = true;
int s0 = index;
ArrayList e0 = new ArrayList();
Rule rule;
decoded = false;
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_DIGIT();
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("A");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("B");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("C");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("D");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("E");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
if (!decoded)
{
{
ArrayList e1 = new ArrayList();
int s1 = index;
decoded = true;
if (decoded)
{
boolean f1 = true;
int c1 = 0;
for (int i1 = 0; i1 < 1 && f1; i1++)
{
rule = decode_StringValue("F");
if ((f1 = rule != null))
{
e1.add(rule);
c1++;
}
}
decoded = c1 == 1;
}
if (decoded)
e0.addAll(e1);
else
index = s1;
}
}
rule = null;
if (decoded)
rule = new HEXDIG(text.substring(s0, index), e0);
else
index = s0;
pop("HEXDIG", decoded, index - s0);
return (HEXDIG)rule;
}
public class StringValue extends Rule
{
public StringValue(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_StringValue(this);
}
}
private StringValue decode_StringValue(String regex)
{
push("*StringValue", regex);
boolean decoded = true;
int start = index;
StringValue stringValue = null;
try
{
String value = text.substring(index, index + regex.length());
if ((decoded = value.equalsIgnoreCase(regex)))
{
index += regex.length();
stringValue = new StringValue(value, null);
}
}
catch (IndexOutOfBoundsException e) {decoded = false;}
pop("*StringValue", decoded, index - start);
return stringValue;
}
public class NumericValue extends Rule
{
public NumericValue(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_NumericValue(this);
}
}
private NumericValue decode_NumericValue(String spelling, String regex, int length)
{
push("*NumericValue", spelling, regex);
boolean decoded = true;
int start = index;
NumericValue numericValue = null;
try
{
String value = text.substring(index, index + length);
if ((decoded = Pattern.matches(regex, value)))
{
index += length;
numericValue = new NumericValue(value, null);
}
}
catch (IndexOutOfBoundsException e) {decoded = false;}
pop("*NumericValue", decoded, index - start);
return numericValue;
}
/* ---------------------------------------------------------------------------
* public rule classes
* ---------------------------------------------------------------------------
*/
static final public class attr_list extends Rule
{
private attr_list(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public attr_list(attr_list rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_attr_list(this);
}
}
static final public class attribute extends Rule
{
private attribute(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public attribute(attribute rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_attribute(this);
}
}
static final public class attr_val_list extends Rule
{
private attr_val_list(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public attr_val_list(attr_val_list rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_attr_val_list(this);
}
}
static final public class attr_tag extends Rule
{
private attr_tag(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public attr_tag(attr_tag rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_attr_tag(this);
}
}
static final public class attr_val extends Rule
{
private attr_val(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public attr_val(attr_val rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_attr_val(this);
}
}
static final public class intval extends Rule
{
private intval(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public intval(intval rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_intval(this);
}
}
static final public class strval extends Rule
{
private strval(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public strval(strval rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_strval(this);
}
}
static final public class boolval extends Rule
{
private boolval(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public boolval(boolval rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_boolval(this);
}
}
static final public class opaque extends Rule
{
private opaque(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public opaque(opaque rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_opaque(this);
}
}
static final public class safe_val extends Rule
{
private safe_val(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public safe_val(safe_val rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_safe_val(this);
}
}
static final public class safe_tag extends Rule
{
private safe_tag(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public safe_tag(safe_tag rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_safe_tag(this);
}
}
static final public class escape_val extends Rule
{
private escape_val(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public escape_val(escape_val rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_escape_val(this);
}
}
static final public class DIGIT extends Rule
{
private DIGIT(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public DIGIT(DIGIT rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_DIGIT(this);
}
}
static final public class HEXDIG extends Rule
{
private HEXDIG(String spelling, ArrayList rules)
{
super(spelling, rules);
}
public HEXDIG(HEXDIG rule)
{
super(rule.spelling, rule.rules);
}
public Object visit(Visitor visitor)
{
return visitor.visit_HEXDIG(this);
}
}
}
/* -----------------------------------------------------------------------------
* eof
* -----------------------------------------------------------------------------
*/