From 60f52e8dc38bf579e7b9b9815ad2ddf3cd786eba Mon Sep 17 00:00:00 2001 From: Anders Nilsson <anders.nilsson@cs.lth.se> Date: Thu, 8 Mar 2007 16:44:30 +0100 Subject: [PATCH] Synching. Working on x3d parser generation --- CompilerGeneration.jrag | 91 +++++++++++++++++++++++++------- JavaCCChunks.jrag | 7 ++- x3d/build.xml | 113 ++++++++++++++++++++++++++++++++++++++++ xmlschema.jjt | 2 +- 4 files changed, 189 insertions(+), 24 deletions(-) create mode 100644 x3d/build.xml diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag index ec60320..314eefb 100644 --- a/CompilerGeneration.jrag +++ b/CompilerGeneration.jrag @@ -18,7 +18,9 @@ aspect AbsGrammarGeneration { public void Start.genAbsGrammar(PrintStream pStream) { pStream.println("// Predefined types"); - pStream.println("Start ::= Element*;"); + pStream.println("Start ::= Specification;"); + pStream.println("Specification ::= XmlHeader Element*;"); + pStream.println("XmlHeader ::=;"); pStream.println("abstract Thing : ComplexElement ::=;"); pStream.println("abstract Element;"); pStream.println("ComplexElement : Element ::= OwlIdentifier Attribute* Element*;"); @@ -27,24 +29,24 @@ aspect AbsGrammarGeneration { pStream.println("StringElement : SimpleElement ::= <IDENTIFIER>;"); pStream.println("IntElement : SimpleElement ::= <INTEGER_LITERAL>;"); pStream.println("FloatElement : SimpleElement ::= <FLOAT_LITERAL>;"); - pStream.println("ClassUse : Thing ::= /decl:Thing/;"); +// pStream.println("ClassUse : Thing ::= /decl:Thing/;"); 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("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>;"); @@ -64,8 +66,59 @@ aspect GenJavaCC { } public void Start.genJavaCC(PrintStream pStream) { - + genJavaCCHeader(pStream); + genJavaCCLiterals(pStream); + genJavaCCIdentifiers(pStream); + genJavaCCSeparators(pStream); + genJavaCCOperators(pStream); + pStream.println("Start Start() #Start : {}"); + pStream.println("{"); + pStream.println(" Specification()"); + pStream.println(" { return jjThis; }"); + pStream.println("}"); + pStream.println(); + pStream.println("void Specification() #Specification : {}"); + pStream.println("{"); + pStream.println(" XmlHeader()"); + pStream.println(" ElementList()"); + pStream.println("}"); + pStream.println(); + pStream.println("void XmlHeader() #XmlHeader : {}"); + pStream.println("{"); + pStream.println(" \"<?\" <XML> AttributeList() \"?>\""); + pStream.println("}"); + pStream.println(); + pStream.println("void ElementList() #List : {}"); + pStream.println("{"); + pStream.println(" (Element())*"); + pStream.println("}"); + pStream.println(); + pStream.println("void AttributeList() #List : {}"); + pStream.println("{"); + pStream.println(" (Attribute())*"); + pStream.println("}"); + pStream.println(); + pStream.println("void Element() : {}"); + pStream.println("{"); + pStream.println(" "); + pStream.println("}"); + pStream.println(); + pStream.println("void Attribute() : {}"); + pStream.println("{"); + pStream.println(" "); + pStream.println("}"); } + + void XsElement.genJavaCC(PrintStream pStream) { + String name = getName(); + pStream.println("void "+name+"() #"+name+" : {}"); + pStream.println("{"); + pStream.println(" \"<\" <"+name.toUpperCase()+"> AttributeList() \">\""); + pStream.println(" ElementList()"); + pStream.println(" \"</\" <"+name.toUpperCase()+"> \">\""); + pStream.println("}"); + } + } // aspect GenAspects { diff --git a/JavaCCChunks.jrag b/JavaCCChunks.jrag index 1031131..23fb732 100644 --- a/JavaCCChunks.jrag +++ b/JavaCCChunks.jrag @@ -18,11 +18,11 @@ aspect JavaCCChunks { pStream.println(" STATIC = false;"); pStream.println("} "); pStream.println(); - pStream.println("PARSER_BEGIN(SiarasParser)"); + pStream.println("PARSER_BEGIN(XmlParser)"); pStream.println(" package AST;"); - pStream.println(" public class SiarasParser {"); + pStream.println(" public class XmlParser {"); pStream.println("}"); - pStream.println("PARSER_END(SiarasParser)"); + pStream.println("PARSER_END(XmlParser)"); pStream.println(); pStream.println("//----------------------------------------------//"); pStream.println("// LEXICAL TOKENS //"); @@ -43,7 +43,6 @@ aspect JavaCCChunks { pStream.println("SPECIAL_TOKEN : /* COMMENTS */ "); pStream.println("{"); pStream.println(" < \"<!--\" ( ~[\"-\"] | ( \"-\" ~[\"-\"] ) )* \"-->\">"); - pStream.println(" | < \"<rdfs:comment\" ( ~[\"<\"] | ( \"<\" ~[\"/\"] ) )* \"</rdfs:comment>\" >"); pStream.println("}// COMMENTS"); pStream.println(); } diff --git a/x3d/build.xml b/x3d/build.xml new file mode 100644 index 0000000..763f393 --- /dev/null +++ b/x3d/build.xml @@ -0,0 +1,113 @@ +<!-- + Targets for working from terminal window: + build (default) - generates java files and compiles them + clean - removes all generated files and class files + Targets for working from Eclipse: + gen - generates java files + genClean - removes all generated files and their class files + --> +<project name="OntologyCompiler" default="build" basedir="."> + + <!-- "package" is the directory where generated files will be stored --> + <property name="package" value="AST"/> + + <!-- "tools" is the directory where generators and libraries are located. --> + <property name="tools" value="../tools"/> + + <property name="javacc.home" value="../tools/javacc-4.0"/> + + <property name="parser.name" value="Parser"/> + + <!-- "jflex" is an ant task class for the scanner generator in JFlex.jar --> +<!-- <taskdef name="jflex" classname="JFlex.anttask.JFlexTask" classpath="tools/JFlex.jar"/> --> + <!-- "beaver" is an ant task class for the parser generator in beaver.jar --> +<!-- <taskdef name="beaver" classname="beaver.comp.run.AntTask" classpath="tools/beaver.jar"/> --> + <!-- "jastadd" is an ant task class in jastadd2.jar --> + <taskdef name="jastadd" classname="jastadd.JastAddTask" classpath="../tools/jastadd2.jar"/> + + <!-- compile sources --> + <target name="build" depends="gen"> + <javac compiler="jikes" debug="true" nowarn="true" srcdir="." includes="**/*.java" excludes="tools/** siaras/**" classpath=".:${tools}/beaver-rt.jar:${tools}/junit.jar"/> + </target> + + <!-- generate compiler source files --> + <target name="gen" description="Generate compiler source files"> + <!-- create AST node types and weave aspect modules --> + <echo message = "Running JastAdd"/> +<!-- <jastadd package="${package}" rewrite="true" beaver="true" novisitcheck="true"> --> + <jastadd package="${package}" grammar="${parser.name}" rewrite="true" jjtree="true"> + <fileset dir="."> + <include name="*.ast"/> + <include name="*.jrag"/> + <include name="*.jadd"/> + </fileset> + </jastadd> + <jjtree + target="x3d.jjt" + outputdirectory="${package}" + javacchome="${javacc.home}" + buildnodefiles="true" + static="false" + multi="true" + visitor="true" + nodedefaultvoid="true" + nodeprefix='""' + nodepackage="${package}" + /> + <javacc + target="${package}/x3d.jj" + outputdirectory="${package}" + javacchome="${javacc.home}" + buildparser="true" + buildtokenmanager="true" + static="false" + /> + + <!-- generate the scanner --> +<!-- <echo message = "Running jflex"/> --> +<!-- <jflex file="parser/java14.flex" outdir="parser" nobak="yes"/> --> + <!-- generate the scanner --> +<!-- <jflex file="parser/unicode.flex" outdir="parser" nobak="yes"/> --> + <!-- generate the parser phase 1, create a full .lalr specification from fragments--> +<!-- <echo message = "Running parser phase 1"/> --> +<!-- <concat destfile="parser/JavaParser.all" binary="true"> --> +<!-- <fileset dir="."> --> +<!-- <include name="parser/java14.parser"/> --> +<!-- </fileset> --> +<!-- </concat> --> + <!-- generate the parser phase 2, translating .lalr to .beaver --> +<!-- <java classpath="${tools}/proj.jar:${tools}/beaver-rt.jar" classname="Main"> --> +<!-- <arg line="parser/JavaParser.all parser/JavaParser.beaver"/> --> +<!-- </java> --> + <!-- generate the parser phase 3, translating .beaver to .java --> +<!-- <beaver file="parser/JavaParser.beaver" terminalNames="yes" compress="no" useSwitch="yes"/> --> + </target> + + <target name="test" depends="build"> + <java classname="GenCompiler" classpath="."> + <arg value="GripperOntology_experimental3.owl" /> + </java> + </target> + + <!-- remove generated source files and .class files --> + <target name="clean" depends="cleanGen"> + <!-- delete all .class files recursively --> + <delete> + <fileset dir="." includes="**/*.class" excludes="beaver/*.class"/> + </delete> + </target> + + <target name="jar" depends="build"> + <jar destfile="X3DCompiler.jar" basedir="." includes="**/*.class" excludes="test/**"> + <manifest> + <attribute name="Main-Class" value="GenOntology"/> + </manifest> + </jar> + </target> + + <!-- remove generated source files and their .class files --> + <target name="cleanGen"> + <delete dir="${package}"/> + </target> +</project> + diff --git a/xmlschema.jjt b/xmlschema.jjt index 3c50768..068cc8e 100644 --- a/xmlschema.jjt +++ b/xmlschema.jjt @@ -299,7 +299,7 @@ SPECIAL_TOKEN : /* COMMENTS */ //--------------------------------------------------------------------// -// THE OWL LANGUAGE GRAMMAR // +// THE XMLSCHEMA GRAMMAR // //--------------------------------------------------------------------// Start Start() #Start : {} -- GitLab