org.antlr.runtime.SerializedGrammar Maven / Gradle / Ivy
package org.antlr.runtime;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.util.List;
import java.util.ArrayList;
public class SerializedGrammar {
public static final String COOKIE = "$ANTLR";
public static final int FORMAT_VERSION = 1;
//public static org.antlr.tool.Grammar gr; // TESTING ONLY; remove later
public String name;
public char type; // in {l, p, t, c}
public List rules;
class Rule {
String name;
Block block;
public Rule(String name, Block block) {
this.name = name;
this.block = block;
}
public String toString() {
return name+":"+block;
}
}
class Block {
List[] alts;
public Block(List[] alts) {
this.alts = alts;
}
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("(");
for (int i = 0; i < alts.length; i++) {
List alt = alts[i];
if ( i>0 ) buf.append("|");
buf.append(alt.toString());
}
buf.append(")");
return buf.toString();
}
}
class TokenRef {
int ttype;
public TokenRef(int ttype) { this.ttype = ttype; }
public String toString() { return String.valueOf(ttype); }
}
class RuleRef {
int ruleIndex;
public RuleRef(int ruleIndex) { this.ruleIndex = ruleIndex; }
public String toString() { return String.valueOf(ruleIndex); }
}
public SerializedGrammar(String filename) throws IOException {
System.out.println("loading "+filename);
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream bos = new BufferedInputStream(fis);
DataInputStream in = new DataInputStream(bos);
readFile(in);
in.close();
}
protected void readFile(DataInputStream in) throws IOException {
String cookie = readString(in); // get $ANTLR
if ( !cookie.equals(COOKIE) ) throw new IOException("not a serialized grammar file");
int version = in.readByte();
char grammarType = (char)in.readByte();
this.type = grammarType;
String grammarName = readString(in);
this.name = grammarName;
System.out.println(grammarType+" grammar "+grammarName);
int numRules = in.readShort();
System.out.println("num rules = "+numRules);
rules = readRules(in, numRules);
}
protected List readRules(DataInputStream in, int numRules) throws IOException {
List rules = new ArrayList();
for (int i=0; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy