Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
X
XMLSchemaCompiler
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Anders Nilsson
XMLSchemaCompiler
Commits
6ce01a12
Commit
6ce01a12
authored
17 years ago
by
Anders Nilsson
Browse files
Options
Downloads
Patches
Plain Diff
Generation of JavaCC grammar maybe soon works. Must fix abstract
grammar generation before it can be tested though.
parent
01e91f86
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
.bzrignore
+1
-0
1 addition, 0 deletions
.bzrignore
CompilerGeneration.jrag
+151
-15
151 additions, 15 deletions
CompilerGeneration.jrag
PrettyPrinter.jrag
+1
-22
1 addition, 22 deletions
PrettyPrinter.jrag
x3d/build.xml
+1
-1
1 addition, 1 deletion
x3d/build.xml
with
154 additions
and
38 deletions
.bzrignore
+
1
−
0
View file @
6ce01a12
...
@@ -5,3 +5,4 @@ x3d/GeneratedAspects.jrag
...
@@ -5,3 +5,4 @@ x3d/GeneratedAspects.jrag
x3d/Parser.java
x3d/Parser.java
x3d/x3d.ast
x3d/x3d.ast
x3d/x3d.jjt
x3d/x3d.jjt
javadoc
This diff is collapsed.
Click to expand it.
CompilerGeneration.jrag
+
151
−
15
View file @
6ce01a12
...
@@ -67,6 +67,7 @@ aspect GenJavaCC {
...
@@ -67,6 +67,7 @@ aspect GenJavaCC {
public void Start.genJavaCC(PrintStream pStream) {
public void Start.genJavaCC(PrintStream pStream) {
genJavaCCHeader(pStream);
genJavaCCHeader(pStream);
genJavaCCTokens(pStream);
genJavaCCLiterals(pStream);
genJavaCCLiterals(pStream);
genJavaCCIdentifiers(pStream);
genJavaCCIdentifiers(pStream);
genJavaCCSeparators(pStream);
genJavaCCSeparators(pStream);
...
@@ -98,41 +99,176 @@ aspect GenJavaCC {
...
@@ -98,41 +99,176 @@ aspect GenJavaCC {
pStream.println(" (Attribute())*");
pStream.println(" (Attribute())*");
pStream.println("}");
pStream.println("}");
pStream.println();
pStream.println();
pStream.println("void AttValue() #AttValue : { Token t; }");
pStream.println("{");
pStream.println(" t = <STRING_LITERAL>");
pStream.println(" {jjtThis.setSTRING_LITERAL(t.image);}");
pStream.println("}");
pStream.println("void Element() : {}");
pStream.println("void Element() : {}");
pStream.println("{");
pStream.println("{");
ListIterator<Element> iter = elementTypes().listIterator();
pStream.println(" \"<\"");
while (iter.hasNext) {
Iterator iter = elementTypes().values().iterator();
pStream.println(" "+iter.next().name()+"()");
if (iter.hasNext()) {
pStream.println(" "+fixName(((XsElement) iter.next()).name())+"()");
}
while (iter.hasNext()) {
pStream.println(" | "+fixName(((XsElement) iter.next()).name())+"()");
}
}
pStream.println(" ");
pStream.println(" ");
pStream.println("}");
pStream.println("}");
pStream.println();
pStream.println();
pStream.println("void Attribute() : {}");
pStream.println("void Attribute() : {}");
pStream.println("{");
pStream.println("{");
iter = attributeTypes().values().iterator();
if (iter.hasNext()) {
pStream.println(" "+fixName(((XsAttribute) iter.next()).name())+"()");
}
while (iter.hasNext()) {
pStream.println(" | "+fixName(((XsAttribute) iter.next()).name())+"()");
}
pStream.println(" ");
pStream.println(" ");
pStream.println("}");
pStream.println("}");
super.genJavaCC(pStream);
pStream.println();
// This is somewhat of a hack, but seems to work work as an
// easy way to eliminate duplicate attribute
// declarations. Anders Nilsson 070808.
Hashtable h = elementTypes();
h.putAll(attributeTypes());
iter = h.values().iterator();
while (iter.hasNext()) {
((ASTNode) iter.next()).genJavaCC(pStream);
}
// super.genJavaCC(pStream);
}
}
void XsElement.genJavaCC(PrintStream pStream) {
void XsElement.genJavaCC(PrintStream pStream) {
String name = getName();
if (hasName()) { // If not, it's just a reference to an element declaration
pStream.println("void "+name+"() #"+name+" : {}");
String name = name();
pStream.println("{");
pStream.println("void "+name+"() #"+name+" : {}");
pStream.println(" \"<\" <"+name.toUpperCase()+"> AttributeList() \">\"");
pStream.println("{");
pStream.println(" ElementList()");
pStream.println(" \"</\" <"+name.toUpperCase()+"> \">\"");
pStream.println(" <"+name+"> AttributeList() \">\"");
pStream.println("}");
// pStream.println(" \"<\" <"+name+"> AttributeList() \">\"");
pStream.println(" ElementList()");
pStream.println(" \"</\" <"+name+"> \">\"");
// pStream.println(" \"<\" <"+name.toUpperCase()+"> AttributeList() \">\"");
// pStream.println(" ElementList()");
// pStream.println(" \"</\" <"+name.toUpperCase()+"> \">\"");
pStream.println("}");
}
}
void XsAttribute.genJavaCC(PrintStream pStream) {
if (hasName()) { // If not, it's just a reference to an attribute declaration
String name = fixName(name());
pStream.println("void "+name+"() #"+name+" : {}");
pStream.println("{");
pStream.println(" <"+name+"> \"=\" AttValue()");
// pStream.println(" <"+name.toUpperCase()+"> \"=\" AttValue()");
pStream.println("}");
}
}
}
void Start.genJavaCCTokens(PrintStream pStream) {
pStream.println("<DEFAULT, BOUNDS> TOKEN : /* Reserved Words */");
pStream.println("{");
Hashtable h = elementTypes();
h.putAll(attributeTypes());
Iterator iter = h.values().iterator();
pStream.println(" <XML\t\t: \"XML\">");
while (iter.hasNext()) {
String name = ((ComplexElement) iter.next()).name();
pStream.println(" | <"+fixName(name)+
// pStream.println(" | <"+fixName(name).toUpperCase()+
"\t\t: \""+name+"\" >");
}
// iter = attributeTypes().iterator();
// while (iter.hasNext()) {
// String name = ((ComplexElement) iter.next()).name();
// pStream.println(" | <"+fixName(name).toUpperCase()+
// "\t\t: \""+name+"\" >");
// }
pStream.println("}// Reserved Words");
pStream.println();
}
}
}
aspect Types {
aspect Types {
syn LinkedList<XsElement> Element.elementTypes() {
Hashtable Start.elementTypes() {
return l;
Hashtable h = new Hashtable();
return elementTypes(h);
}
syn Hashtable ASTNode.elementTypes(Hashtable h) {
for (int i=0; i<getNumChild(); i++) {
getChild(i).elementTypes(h);
}
return h;
}
eq XsElement.elementTypes(Hashtable h) {
if (hasName()) {
h.put(name(),this);
}
super.elementTypes(h);
return h;
}
Hashtable Start.attributeTypes() {
Hashtable h = new Hashtable();
return attributeTypes(h);
}
syn Hashtable ASTNode.attributeTypes(Hashtable h) {
for (int i=0; i<getNumChild(); i++) {
getChild(i).attributeTypes(h);
}
return h;
}
eq XsAttribute.attributeTypes(Hashtable h) {
if (hasName()) {
h.put(name(),this);
}
super.attributeTypes(h);
return h;
}
}
}
}
aspect Misc {
syn String ComplexElement.name() {
for (int i=0; i<getNumAttribute(); i++) {
if (getAttribute(i) instanceof Name) {
return getAttribute(i).getAttValue().getSTRING_LITERAL().
replace("\""," ").trim();
}
}
// OK, no name found so let's report that
return "NoNameFound";
}
syn boolean ComplexElement.hasName() {
for (int i=0; i<getNumAttribute(); i++) {
if (getAttribute(i) instanceof Name) {
return true;
}
}
// OK, no name found so let's report that
return false;
}
static String ASTNode.fixName(String s) {
if (s.equals("class")) {
return "clazz";
}
s = s.replace("-","_");
return s;
}
}
// aspect GenAspects {
// aspect GenAspects {
// public void Start.genAspects(PrintStream pStream) {
// public void Start.genAspects(PrintStream pStream) {
// pStream.println();
// pStream.println();
...
@@ -382,7 +518,7 @@ aspect ParserGen {
...
@@ -382,7 +518,7 @@ aspect ParserGen {
pStream.println("import java.io.InputStreamReader;");
pStream.println("import java.io.InputStreamReader;");
pStream.println("import java.io.Reader;");
pStream.println("import java.io.Reader;");
pStream.println("");
pStream.println("");
pStream.println("import AST.X
3d
Parser;");
pStream.println("import AST.X
ml
Parser;");
pStream.println("import AST.ParseException;");
pStream.println("import AST.ParseException;");
pStream.println("import AST.Start;");
pStream.println("import AST.Start;");
pStream.println("");
pStream.println("");
...
@@ -392,7 +528,7 @@ aspect ParserGen {
...
@@ -392,7 +528,7 @@ aspect ParserGen {
pStream.println(" Reader r = getReader(args);");
pStream.println(" Reader r = getReader(args);");
pStream.println(" Start ast = null;");
pStream.println(" Start ast = null;");
pStream.println(" try {");
pStream.println(" try {");
pStream.println("
Siaras
Parser parser = new
Siaras
Parser(r);");
pStream.println("
Xml
Parser parser = new
Xml
Parser(r);");
pStream.println();
pStream.println();
pStream.println(" ast = parser.Start();");
pStream.println(" ast = parser.Start();");
pStream.println(" } catch (ParseException e) {");
pStream.println(" } catch (ParseException e) {");
...
...
This diff is collapsed.
Click to expand it.
PrettyPrinter.jrag
+
1
−
22
View file @
6ce01a12
...
@@ -17,29 +17,8 @@ aspect PrettyPrinter {
...
@@ -17,29 +17,8 @@ aspect PrettyPrinter {
public void XsElement.prettyPrint(String ind, PrintStream pStream) {
public void XsElement.prettyPrint(String ind, PrintStream pStream) {
if (hasName()) {
if (hasName()) {
pStream.println(ind+"Element: "+
getN
ame());
pStream.println(ind+"Element: "+
n
ame());
}
}
}
}
}
}
aspect Misc {
syn String XsElement.getName() {
for (int i=0; i<getNumAttribute(); i++) {
if (getAttribute(i) instanceof Name) {
return getAttribute(i).getAttValue().getSTRING_LITERAL();
}
}
// OK, no name found so let's report that
return "NoNameFound";
}
syn boolean XsElement.hasName() {
for (int i=0; i<getNumAttribute(); i++) {
if (getAttribute(i) instanceof Name) {
return true;
}
}
// OK, no name found so let's report that
return false;
}
}
This diff is collapsed.
Click to expand it.
x3d/build.xml
+
1
−
1
View file @
6ce01a12
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
<property
name=
"javacc.home"
value=
"../tools/javacc-4.0"
/>
<property
name=
"javacc.home"
value=
"../tools/javacc-4.0"
/>
<property
name=
"parser.name"
value=
"Parser"
/>
<property
name=
"parser.name"
value=
"
Xml
Parser"
/>
<!-- "jflex" is an ant task class for the scanner generator in JFlex.jar -->
<!-- "jflex" is an ant task class for the scanner generator in JFlex.jar -->
<!-- <taskdef name="jflex" classname="JFlex.anttask.JFlexTask" classpath="tools/JFlex.jar"/> -->
<!-- <taskdef name="jflex" classname="JFlex.anttask.JFlexTask" classpath="tools/JFlex.jar"/> -->
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment