From 08e6ea11e96734f3fd6aee0e0f763832a1f9eb86 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Fri, 17 Jul 2020 18:01:38 +0200 Subject: [PATCH] Add defaultFolders, fix some of the empty newlines. --- relast2uml.base/src/main/jastadd/Analysis.jrag | 10 ++++++++++ relast2uml.base/src/main/jastadd/Navigation.jrag | 8 ++++++++ .../org/jastadd/relast2uml/compiler/Compiler.java | 14 +++++++++----- .../src/main/resources/TypeDecl.mustache | 7 ++++--- .../org/jastadd/relast2uml/test/CompilerTest.java | 1 + relast2uml.base/src/test/resources/Example.relast | 2 +- 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/relast2uml.base/src/main/jastadd/Analysis.jrag b/relast2uml.base/src/main/jastadd/Analysis.jrag index 84a3af2..317cf9d 100644 --- a/relast2uml.base/src/main/jastadd/Analysis.jrag +++ b/relast2uml.base/src/main/jastadd/Analysis.jrag @@ -1,2 +1,12 @@ aspect Analysis { + syn lazy Folder GrammarFile.defaultFolder() { + Folder result = new Folder(); + result.setName(new java.io.File(getFileName()).getName().replace(".relast", "").replace(".ast", "")); + for (Declaration decl : getDeclarationList()) { + if (decl.isTypeDecl() && !decl.asTypeDecl().hasSourceFolder()) { + result.addType(decl.asTypeDecl()); + } + } + return result; + } } diff --git a/relast2uml.base/src/main/jastadd/Navigation.jrag b/relast2uml.base/src/main/jastadd/Navigation.jrag index a5d0889..09c9ae1 100644 --- a/relast2uml.base/src/main/jastadd/Navigation.jrag +++ b/relast2uml.base/src/main/jastadd/Navigation.jrag @@ -13,6 +13,14 @@ aspect Navigation { eq Program.getChild().containedFile() = null; eq Relast2Uml.getChild().containedFile() = null; + // --- isTypeDecl (should be in preprocessor) --- + syn boolean Declaration.isTypeDecl() = false; + eq TypeDecl.isTypeDecl() = true; + + // --- asTypeDecl (should be in preprocessor) --- + syn TypeDecl Declaration.asTypeDecl() = null; + eq TypeDecl.asTypeDecl() = this; + // --- isTypeComponent (should be in preprocessor) --- syn boolean Component.isTypeComponent() = false; eq TypeComponent.isTypeComponent() = true; diff --git a/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/Compiler.java b/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/Compiler.java index bb60cd8..1e76de8 100644 --- a/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/Compiler.java +++ b/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/Compiler.java @@ -1,10 +1,7 @@ package org.jastadd.relast2uml.compiler; import beaver.Parser; -import org.jastadd.relast2uml.ast.ErrorMessage; -import org.jastadd.relast2uml.ast.GrammarFile; -import org.jastadd.relast2uml.ast.Program; -import org.jastadd.relast2uml.ast.Relast2Uml; +import org.jastadd.relast2uml.ast.*; import org.jastadd.relast2uml.compiler.options.CommandLine; import org.jastadd.relast2uml.compiler.options.FlagOption; import org.jastadd.relast2uml.compiler.options.Option; @@ -25,6 +22,7 @@ public class Compiler { private StringOption optionOutputFile; private StringOption optionInputRelast2Uml; + private FlagOption optionDefaultFolders; private FlagOption optionHelp; private FlagOption optionVersion; private FlagOption optionVerbose; @@ -165,6 +163,8 @@ public class Compiler { "output", "target file to be generated.", "uml.md").makeOptional()); optionInputRelast2Uml = addOption(new StringOption( "inputRelast2Uml", "relast2uml definition file.").makeOptional()); + optionDefaultFolders = addOption(new FlagOption( + "defaultFolders", "Creates a default folder per grammar file.")); optionHelp = addOption(new FlagOption( "help", "Print usage and exit.")); optionVersion = addOption(new FlagOption( @@ -193,7 +193,6 @@ public class Compiler { inputGrammar.dumpTree(System.out); } program.addGrammarFile(inputGrammar); - inputGrammar.treeResolveAll(); inputGrammar.setFileName(inputGrammarFileName); } catch (IOException | Parser.Exception e) { throw new CompilerException("Could not parse grammar file " + inputGrammarFileName, e); @@ -217,6 +216,11 @@ public class Compiler { } relast2Uml.setProgram(program); relast2Uml.treeResolveAll(); + if (optionDefaultFolders.isSet()) { + for (GrammarFile grammarFile : program.getGrammarFileList()) { + relast2Uml.addFolder(grammarFile.defaultFolder()); + } + } return relast2Uml; } diff --git a/relast2uml.base/src/main/resources/TypeDecl.mustache b/relast2uml.base/src/main/resources/TypeDecl.mustache index 48eff2c..a72b5dc 100644 --- a/relast2uml.base/src/main/resources/TypeDecl.mustache +++ b/relast2uml.base/src/main/resources/TypeDecl.mustache @@ -1,4 +1,5 @@ -{{=<% %>=}}<%#isAbstract%>abstract <%/isAbstract%>class <%name%><%#InnerTokenComponents%><%#first%> {<%/first%> +{{=<% %>=}}<%#isAbstract%>abstract <%/isAbstract%>class <%name%><%#InnerTokenComponents%><%#first%> { +<%/first%> <%name%> -<%#last%>}<%/last%> -<%/InnerTokenComponents%><%={{ }}=%> +<%#last%> +}<%/last%><%/InnerTokenComponents%><%={{ }}=%> diff --git a/relast2uml.base/src/test/java/org/jastadd/relast2uml/test/CompilerTest.java b/relast2uml.base/src/test/java/org/jastadd/relast2uml/test/CompilerTest.java index 871500b..14de18e 100644 --- a/relast2uml.base/src/test/java/org/jastadd/relast2uml/test/CompilerTest.java +++ b/relast2uml.base/src/test/java/org/jastadd/relast2uml/test/CompilerTest.java @@ -35,6 +35,7 @@ public class CompilerTest { String[] args = { "--output=" + output, "--inputRelast2Uml=" + inputRelast2Uml, + "--defaultFolders", inputGrammar }; diff --git a/relast2uml.base/src/test/resources/Example.relast b/relast2uml.base/src/test/resources/Example.relast index a4a05b6..0eb3846 100644 --- a/relast2uml.base/src/test/resources/Example.relast +++ b/relast2uml.base/src/test/resources/Example.relast @@ -11,7 +11,7 @@ Funktionsprinzip ::= Dateneingangswert* Verarbeitungsschritt* Datenausgangswert* abstract Datenquelle; // Beispiel für Wert: FB_links, ist_diff, max_diff -Wert : Datenquelle ::= <Datentyp> ; +Wert : Datenquelle ::= <Datentyp> <A> <B>; // Ein Wert, der bei "Dateneingang" steht, z.B. für ReLi: max_Diff oder FB,links // Beispiel für Dateneingangswert: Zuordnung, aus welcher Quelle der Wert ausgelesen werden soll -- GitLab