/* Generated By:JavaCC: Do not edit this line. ArchiveParser.java */
package org.apache.commons.jrcs.rcs;
import java.util.Map;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
/**
* Parses an RCS/CVS style version control archive into an Archive.
* This class is NOT thread safe.
*
* @author <a href="mailto:juanco@suigeneris.org">Juanco Anez</a>
* @version $Revision: 2967 $ $Date: 2005-10-26 06:52:33 -0400 (Wed, 26 Oct 2005) $
* @see Archive
*/
class ArchiveParser implements ArchiveParserConstants {
static final String ident = "RCS ArchiveParser Parser $version$:";
public static void main(String args[]) {
ArchiveParser parser;
if (args.length == 0)
{
System.out.println(ident + " Reading from standard input . . .");
parser = new ArchiveParser(System.in);
}
else if (args.length == 1)
{
System.out.println(ident + " Reading from file " + args[0] + " . . .");
try
{
parser = new ArchiveParser(new FileInputStream(args[0]));
}
catch (java.io.FileNotFoundException e)
{
System.out.println(ident + " File " + args[0] + " not found.");
return;
}
}
else
{
System.out.println(ident+" Usage is one of:");
System.out.println(" java ArchiveParser < inputfile");
System.out.println("OR");
System.out.println(" java ArchiveParser inputfile");
return;
}
parser.parse();
}
public static void load(Archive arc, InputStream input) throws ParseException
{
ArchiveParser parser = new ArchiveParser(input);
parser.archive(arc);
}
public static void load(Archive arc, String fname) throws FileNotFoundException, ParseException
{
load(arc, new FileInputStream(fname) );
}
public void parse()
{
try
{
archive(null);
System.out.println("RCS ArchiveParser Parser version 1.1: RCS ArchiveParser parsed successfully.");
}
catch (ParseException e)
{
System.out.println("RCS ArchiveParser Parser version 1.1: Encountered errors during parse.");
}
}
/**
* PARSER STARTS HERE
*/
final public void archive(Archive arc) throws ParseException {
admin(arc);
label_1:
while (true) {
switch (jj_nt.kind) {
case NUM:
;
break;
default:
break label_1;
}
delta(arc);
}
desc(arc);
label_2:
while (true) {
switch (jj_nt.kind) {
case NUM:
;
break;
default:
break label_2;
}
text(arc);
}
jj_consume_token(0);
}
final public void admin(Archive arc) throws ParseException {
head(arc);
switch (jj_nt.kind) {
case BRANCH:
branch(arc);
break;
default:
;
}
access(arc);
symbols(arc);
locks(arc);
optionals(arc);
}
final public void optionals(Archive arc) throws ParseException {
label_3:
while (true) {
switch (jj_nt.kind) {
case COMMENT:
case EXPAND:
case ID:
;
break;
default:
break label_3;
}
switch (jj_nt.kind) {
case COMMENT:
comment(arc);
break;
case EXPAND:
expand(arc);
break;
case ID:
newPhrase(arc.phrases);
break;
default:
jj_consume_token(-1);
throw new ParseException();
}
}
}
final public void newPhrases(Map map) throws ParseException {
label_4:
while (true) {
switch (jj_nt.kind) {
case ID:
;
break;
default:
break label_4;
}
newPhrase(map);
}
}
final public void head(Archive arc) throws ParseException {
Version v;
jj_consume_token(HEAD);
switch (jj_nt.kind) {
case NUM:
v = version();
arc.setHead(v);
break;
default:
;
}
jj_consume_token(28);
}
final public void branch(Archive arc) throws ParseException {
Version v;
jj_consume_token(BRANCH);
switch (jj_nt.kind) {
case NUM:
v = version();
arc.setBranch(v);
break;
default:
;
}
jj_consume_token(28);
}
final public void access(Archive arc) throws ParseException {
String name;
jj_consume_token(ACCESS);
label_5:
while (true) {
switch (jj_nt.kind) {
case ID:
;
break;
default:
break label_5;
}
name = id();
arc.addUser(name);
}
jj_consume_token(28);
}
final public void symbols(Archive arc) throws ParseException {
String s;
Version v;
jj_consume_token(SYMBOLS);
label_6:
while (true) {
switch (jj_nt.kind) {
case ID:
case SYM:
;
break;
default:
break label_6;
}
s = sym();
jj_consume_token(29);
v = version();
arc.addSymbol(s, v);
}
jj_consume_token(28);
}
final public void locks(Archive arc) throws ParseException {
String name;
Version v;
jj_consume_token(LOCKS);
label_7:
while (true) {
switch (jj_nt.kind) {
case ID:
;
break;
default:
break label_7;
}
name = id();
jj_consume_token(29);
v = version();
arc.addLock(name, v);
}
jj_consume_token(28);
switch (jj_nt.kind) {
case STRICT:
jj_consume_token(STRICT);
jj_consume_token(28);
arc.setStrictLocking(true);
break;
default:
;
}
}
final public void comment(Archive arc) throws ParseException {
String s;
jj_consume_token(COMMENT);
switch (jj_nt.kind) {
case STRING:
s = string();
arc.setComment(s);
break;
default:
;
}
jj_consume_token(28);
}
final public void expand(Archive arc) throws ParseException {
String s;
jj_consume_token(EXPAND);
switch (jj_nt.kind) {
case STRING:
s = string();
arc.setExpand(s);
break;
default:
;
}
jj_consume_token(28);
}
final public void newPhrase(Map map) throws ParseException {
String key;
String value;
StringBuffer values = new StringBuffer();
key = id();
label_8:
while (true) {
switch (jj_nt.kind) {
case ID:
case STRING:
case NUM:
;
break;
default:
break label_8;
}
value = word();
values.append(" " + value);
}
jj_consume_token(28);
if (map != null) map.put(key, values.toString());
}
final public String word() throws ParseException {
String result, right;
result = simpleWord();
switch (jj_nt.kind) {
case 29:
right = range();
result = result + right;
break;
default:
;
}
{if (true) return result;}
throw new Error("Missing return statement in function");
}
final public String simpleWord() throws ParseException {
String result;
Version v;
switch (jj_nt.kind) {
case ID:
result = id();
break;
case NUM:
v = version();
result = v.toString();
break;
case STRING:
result = string();
break;
default:
jj_consume_token(-1);
throw new ParseException();
}
{if (true) return result;}
throw new Error("Missing return statement in function");
}
final public String range() throws ParseException {
String rightSide;
jj_consume_token(29);
rightSide = simpleWord();
{if (true) return ":" + rightSide;}
throw new Error("Missing return statement in function");
}
final public void desc(Archive arc) throws ParseException {
String s;
jj_consume_token(DESC);
s = string();
arc.setDesc(s);
}
final public void delta(Archive arc) throws ParseException {
Version v;
Node node;
int[] d;
String s;
v = version();
node = arc.newNode(v);
jj_consume_token(DATE);
d = date();
node.setDate(d);
jj_consume_token(28);
jj_consume_token(AUTHOR);
s = id();
node.setAuthor(s);
jj_consume_token(28);
jj_consume_token(STATE);
switch (jj_nt.kind) {
case ID:
s = id();
node.setState(s);
break;
default:
;
}
jj_consume_token(28);
jj_consume_token(BRANCHES);
label_9:
while (true) {
switch (jj_nt.kind) {
case NUM:
;
break;
default:
break label_9;
}
v = version();
node.addBranch(arc.newBranchNode(v));
}
jj_consume_token(28);
jj_consume_token(NEXT);
switch (jj_nt.kind) {
case NUM:
v = version();
node.setRCSNext(arc.newNode(v));
break;
default:
;
}
jj_consume_token(28);
newPhrases(node.phrases);
}
final public void text(Archive arc) throws ParseException {
Version v;
Node node;
String log;
String txt;
v = version();
node = arc.getNode(v);
jj_consume_token(LOG);
log = string();
node.setLog(log);
newPhrases(node.phrases);
jj_consume_token(TEXT);
txt = string();
node.setText(txt);
}
final public String id() throws ParseException {
Token t;
t = jj_consume_token(ID);
{if (true) return t.image;}
throw new Error("Missing return statement in function");
}
final public String sym() throws ParseException {
Token t;
switch (jj_nt.kind) {
case SYM:
t = jj_consume_token(SYM);
break;
case ID:
t = jj_consume_token(ID);
break;
default:
jj_consume_token(-1);
throw new ParseException();
}
{if (true) return t.image;}
throw new Error("Missing return statement in function");
}
final public Version version() throws ParseException {
Version v;
int n, r;
n = num();
v = new Version(n);
label_10:
while (true) {
switch (jj_nt.kind) {
case 30:
;
break;
default:
break label_10;
}
jj_consume_token(30);
n = num();
v.__addBranch(n);
}
{if (true) return v;}
throw new Error("Missing return statement in function");
}
final public int[] date() throws ParseException {
int[] n = new int[6];
n[0] = num();
jj_consume_token(30);
n[1] = num();
jj_consume_token(30);
n[2] = num();
jj_consume_token(30);
n[3] = num();
jj_consume_token(30);
n[4] = num();
jj_consume_token(30);
n[5] = num();
{if (true) return n;}
throw new Error("Missing return statement in function");
}
final public int num() throws ParseException {
Token t;
t = jj_consume_token(NUM);
{if (true) return Integer.parseInt(t.image);}
throw new Error("Missing return statement in function");
}
final public String string() throws ParseException {
Token t;
t = jj_consume_token(STRING);
{if (true) return Archive.unquoteString(t.image);}
throw new Error("Missing return statement in function");
}
public ArchiveParserTokenManager token_source;
SimpleCharStream jj_input_stream;
public Token token, jj_nt;
public ArchiveParser(java.io.InputStream stream) {
jj_input_stream = new SimpleCharStream(stream, 1, 1);
token_source = new ArchiveParserTokenManager(jj_input_stream);
token = new Token();
token.next = jj_nt = token_source.getNextToken();
}
public void ReInit(java.io.InputStream stream) {
jj_input_stream.ReInit(stream, 1, 1);
token_source.ReInit(jj_input_stream);
token = new Token();
token.next = jj_nt = token_source.getNextToken();
}
public ArchiveParser(java.io.Reader stream) {
jj_input_stream = new SimpleCharStream(stream, 1, 1);
token_source = new ArchiveParserTokenManager(jj_input_stream);
token = new Token();
token.next = jj_nt = token_source.getNextToken();
}
public void ReInit(java.io.Reader stream) {
jj_input_stream.ReInit(stream, 1, 1);
token_source.ReInit(jj_input_stream);
token = new Token();
token.next = jj_nt = token_source.getNextToken();
}
public ArchiveParser(ArchiveParserTokenManager tm) {
token_source = tm;
token = new Token();
token.next = jj_nt = token_source.getNextToken();
}
public void ReInit(ArchiveParserTokenManager tm) {
token_source = tm;
token = new Token();
token.next = jj_nt = token_source.getNextToken();
}
final private Token jj_consume_token(int kind) throws ParseException {
Token oldToken = token;
if ((token = jj_nt).next != null) jj_nt = jj_nt.next;
else jj_nt = jj_nt.next = token_source.getNextToken();
if (token.kind == kind) {
return token;
}
jj_nt = token;
token = oldToken;
throw generateParseException();
}
final public Token getNextToken() {
if ((token = jj_nt).next != null) jj_nt = jj_nt.next;
else jj_nt = jj_nt.next = token_source.getNextToken();
return 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;
}
final public ParseException generateParseException() {
Token errortok = token.next;
int line = errortok.beginLine, column = errortok.beginColumn;
String mess = (errortok.kind == 0) ? tokenImage[0] : errortok.image;
return new ParseException("Parse error at line " + line + ", column " + column + ". Encountered: " + mess);
}
final public void enable_tracing() {
}
final public void disable_tracing() {
}
}