Select Git revision
CompilerGeneration.jrag
-
Anders Nilsson authored
Can now parse an empty VacuumGripper description. Not much, but at least it doesn't crash any longer
Anders Nilsson authoredCan now parse an empty VacuumGripper description. Not much, but at least it doesn't crash any longer
CompilerGeneration.jrag 8.02 KiB
/* -*-Java-*- */
import java.io.*;
import java.util.*;
aspect AbsGrammarGeneration {
void ASTNode.genAbsGrammar(PrintStream pStream) {
for (int i=0; i<getNumChild(); i++) {
getChild(i).genAbsGrammar(pStream);
}
}
public void Start.genAbsGrammar(PrintStream pStream) {
pStream.println("// Predefined types");
pStream.println("Start ::= ComplexElement;");
pStream.println("abstract Thing ::=;");
pStream.println("abstract Element;");
pStream.println("ComplexElement ::= OwlIdentifier Attribute* Element*;");
// pStream.println("ComplexElement ::= id1:OwlIdentifier id2:OwlIdentifier;");
pStream.println("abstract SimpleElement : Element;");
pStream.println("StringElement : SimpleElement ::= <IDENTIFIER>;");
pStream.println("IntElement : SimpleElement ::= <INTEGER_LITERAL>;");
pStream.println("FloatElement : SimpleElement ::= <FLOAT_LITERAL>;");
pStream.println("Attribute ::= Value;");
pStream.println("RdfDatatype : Attribute ::= ;");
pStream.println("RdfId : Attribute ::= ;");
pStream.println("Xmlns : Attribute ::= ;");
pStream.println("XmlnsProtege : Attribute ::= ;");
pStream.println("XmlnsRdf : Attribute ::= ;");
pStream.println("XmlnsXsd : Attribute ::= ;");
pStream.println("XmlnsRdfs : Attribute ::= ;");
pStream.println("XmlnsOwl : Attribute ::= ;");
pStream.println("XmlnsDaml : Attribute ::= ;");
pStream.println("XmlnsP1 : Attribute ::= ;");
pStream.println("XmlnsDc : Attribute ::= ;");
pStream.println("XmlBase : Attribute ::= ;");
pStream.println("RdfResource : Attribute ::= ;");
pStream.println("RdfAbout : Attribute ::= ;");
pStream.println("RdfParseType : Attribute ::= ;");
pStream.println("Version : Attribute ::= ;");
pStream.println("Value ::= <STRING_LITERAL>;");
pStream.println("OwlIdentifier ::= <IDENTIFIER>;");
pStream.println("AttrValue ::= <STRING_LITERAL>;");
pStream.println();
pStream.println("// Generated types");
super.genAbsGrammar(pStream);
}
void OwlClassDecl.genAbsGrammar(PrintStream pStream) {
pStream.print(getId());
pStream.print(" : "+getSuperClass().getId());
pStream.print(" ::=");
Restrictions restrs = getOwnRestrictions();
for (int i=0; i<restrs.getNumOwlRestriction(); i++) {
pStream.print(" ");
restrs.getOwlRestriction(i).genAbsGrammar(pStream);
}
pStream.println(";");
}
void OwlRestriction.genAbsGrammar(PrintStream pStream) {
// pStream.print(getRestrictionPropertyId());
pStream.print(getRestrictionClassId().substring(0,1).toLowerCase()+
getRestrictionClassId().substring(1));
pStream.print(":");
pStream.print(getRestrictionClassId());
if (allValuesFrom()) {
pStream.print("*");
}
}
String OwlRestriction.getRestrictionPropertyId() {
for (int i=0; i<getNumElement(); i++) {
ComplexElement e = (ComplexElement) getElement(i);
if (e instanceof OwlOnProperty) {
return e.getId();
}
}
return "_Unknown_";
}
String OwlRestriction.getRestrictionClassId() {
for (int i=0; i<getNumElement(); i++) {
ComplexElement e = (ComplexElement) getElement(i);
if (e instanceof OwlAllValuesFrom ||
e instanceof OwlSomeValuesFrom) {
return e.getId(); // Ugly as hell!!
}
}
return "_Unknown_";
}
syn lazy boolean OwlRestriction.allValuesFrom() {
for (int i=0; i<getNumElement(); i++) {
if (getElement(i) instanceof OwlAllValuesFrom) {
return true;
}
}
return false;
}
}
aspect JavaCCGen {
public void ASTNode.genJavaCC(PrintStream pStream) {
for (int i=0; i<getNumChild(); i++) {
getChild(i).genAbsGrammar(pStream);
}
}
public void Start.genJavaCC(PrintStream pStream) {
genJavaCCHeader(pStream);
pStream.println();
genTokenDefs(pStream);
pStream.println();
genJavaCCLiterals(pStream);
pStream.println();
genJavaCCIdentifiers(pStream);
pStream.println();
genJavaCCSeparators(pStream);
pStream.println();
genJavaCCOperators(pStream);
pStream.println();
// OK, so now it's time to start generating some real grammar
// productions.
genJavaCCGrammar(pStream);
}
void ASTNode.genTokenDefs(PrintStream pStream) {
for (int i=0; i<getNumChild(); i++) {
getChild(i).genTokenDefs(pStream);
}
}
void Start.genTokenDefs(PrintStream pStream) {
pStream.println("<DEFAULT, BOUNDS> TOKEN : /* RESERVED WORDS */");
pStream.println("{");
pStream.println(" <XML \t : \"xml\" >");
super.genTokenDefs(pStream);
pStream.println("}");
pStream.println();
}
void OwlClassDecl.genTokenDefs(PrintStream pStream) {
pStream.println(" |<"+getId().toUpperCase()+" \t : \""+getId()+"\">");
}
void ASTNode.genJavaCCGrammar(PrintStream pStream) {
for (int i=0; i<getNumChild(); i++) {
getChild(i).genJavaCCGrammar(pStream);
}
}
void Start.genJavaCCGrammar(PrintStream pStream) {
pStream.println("Start Start() #Start : {}");
pStream.println("{");
pStream.println(" (Device())*");
pStream.println(" { return jjtThis; }");
pStream.println("}");
pStream.println();
super.genJavaCCGrammar(pStream);
}
void OwlClassDecl.genJavaCCGrammar(PrintStream pStream) {
pStream.println("void "+getId()+"() : {}");
pStream.println("{");
if (getId().equals("Device")) {
pStream.print(" \"<\"");
// pStream.print("\"<\" ( <DEVICE> \">\"");
// Restrictions restr = getRestrictions();
// for (int i=0; i< getNumRestriction(); i++) {
// OwlRestriction res = restr.getOwlRestriction(i);
// pStream.print("("+res.getRestrictionClassId()+")"+
// (res.allValuesFrom()?"*":"")+" ");
// }
// pStream.println(" #Device("+getNumRestriction()+"))");
// // List all subclasses
// Iterator subIter = getSubClasses().iterator();
// while (subIter.hasNext()) {
// OwlClassDecl subClass = (OwlClassDecl) subIter.next();
// pStream.println("| "+subClass.getId()+"()");
// }
}
pStream.print(" ( <"+getId().toUpperCase()+"> \">\"");
Restrictions restr = getRestrictions();
for (int i=0; i< getNumRestriction(); i++) {
OwlRestriction res = restr.getOwlRestriction(i);
pStream.print("("+res.getRestrictionClassId()+"())"+
(res.allValuesFrom()?"*":"")+" ");
}
pStream.println(" #"+getId()+"("+getNumRestriction()+"))");
// List all subclasses
Iterator subIter = getSubClasses().iterator();
while (subIter.hasNext()) {
OwlClassDecl subClass = (OwlClassDecl) subIter.next();
pStream.println(" | "+subClass.getId()+"()");
}
pStream.println("}");
}
}
aspect ParserGen {
public void Start.genParser(PrintStream pStream) {
pStream.println("import java.io.FileNotFoundException;");
pStream.println("import java.io.FileReader;");
pStream.println("import java.io.InputStreamReader;");
pStream.println("import java.io.Reader;");
pStream.println("");
pStream.println("import AST.SiarasParser;");
pStream.println("import AST.ParseException;");
pStream.println("import AST.Start;");
pStream.println("");
pStream.println("public class Parser {");
pStream.println();
pStream.println(" protected static Start parse(String args[]) {");
pStream.println(" Reader r = getReader(args);");
pStream.println(" Start ast = null;");
pStream.println(" try {");
pStream.println(" SiarasParser parser = new SiarasParser(r);");
pStream.println();
pStream.println(" ast = parser.Start();");
pStream.println(" } catch (ParseException e) {");
pStream.println(" System.out.println(e.getMessage());");
pStream.println(" }");
pStream.println(" return ast;");
pStream.println(" }");
pStream.println();
pStream.println(" private static Reader getReader(String[] args) {");
pStream.println(" Reader r = null;");
pStream.println(" if (args.length != 1) {");
pStream.println(" r = new InputStreamReader(System.in);");
pStream.println(" } else {");
pStream.println(" try {");
pStream.println(" r = new FileReader(args[0]);");
pStream.println(" } catch (FileNotFoundException e1) {");
pStream.println(" System.err.println(\"Dumper: file \" + args[0] + \" not found\");");
pStream.println(" }");
pStream.println(" }");
pStream.println(" return r;");
pStream.println(" }");
pStream.println("}");
}
}