From efc50dfa21acefd85b95e5dd646bfe6876ee4111 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Sun, 3 May 2020 11:05:35 +0200 Subject: [PATCH] separate relast preprocessor from ros2rag --- build.gradle | 36 +-- src/main/jastadd/DumpTree.jrag | 53 ----- src/main/jastadd/NameResolution.jrag | 27 --- src/main/jastadd/Navigation.jrag | 36 --- src/main/jastadd/RelAst.parser | 218 ------------------ src/main/jastadd/RelAst.relast | 49 ---- src/main/jastadd/backend/AbstractGrammar.jadd | 171 -------------- 7 files changed, 21 insertions(+), 569 deletions(-) delete mode 100644 src/main/jastadd/DumpTree.jrag delete mode 100644 src/main/jastadd/RelAst.parser delete mode 100644 src/main/jastadd/RelAst.relast delete mode 100644 src/main/jastadd/backend/AbstractGrammar.jadd diff --git a/build.gradle b/build.gradle index 5cd8f59..dcf62a1 100644 --- a/build.gradle +++ b/build.gradle @@ -67,7 +67,7 @@ task relast(type: JavaExec) { args = [ "../libs/relast.jar", - "./src/main/jastadd/RelAst.relast", + "../relast.preprocessor/src/main/jastadd/RelAst.relast", "./src/main/jastadd/Ros2Rag.relast", "--listClass=java.util.ArrayList", "--jastAddList=JastAddList", @@ -78,7 +78,7 @@ task relast(type: JavaExec) { ] inputs.files file("../libs/relast.jar"), - file("src/main/jastadd/RelAST.relast"), + file("../relast.preprocessor/src/main/jastadd/RelAST.relast"), file("src/main/jastadd/Ros2Rag.relast") outputs.files file("./src/gen/jastadd/Ros2Rag.ast"), file("src/gen/jastadd/Ros2Rag.jadd"), @@ -93,19 +93,24 @@ jastadd { module("Ros2Rag") { java { - basedir "." - include "src/main/**/*.java" - include "src/gen/**/*.java" + basedir ".." + include "relast.preprocessor/main/**/*.java" + include "relast.preprocessor/gen/**/*.java" + include "ros2rag.base/src/main/**/*.java" + include "ros2rag.base/src/gen/**/*.java" } jastadd { - basedir "." - include "src/main/jastadd/**/*.ast" - include "src/main/jastadd/**/*.jadd" - include "src/main/jastadd/**/*.jrag" - include "src/gen/jastadd/**/*.ast" - include "src/gen/jastadd/**/*.jadd" - include "src/gen/jastadd/**/*.jrag" + basedir ".." + include "relast.preprocessor/src/main/jastadd/**/*.ast" + include "relast.preprocessor/src/main/jastadd/**/*.jadd" + include "relast.preprocessor/src/main/jastadd/**/*.jrag" + include "ros2rag.base/src/main/jastadd/**/*.ast" + include "ros2rag.base/src/main/jastadd/**/*.jadd" + include "ros2rag.base/src/main/jastadd/**/*.jrag" + include "ros2rag.base/src/gen/jastadd/**/*.ast" + include "ros2rag.base/src/gen/jastadd/**/*.jadd" + include "ros2rag.base/src/gen/jastadd/**/*.jrag" } scanner { @@ -113,9 +118,10 @@ jastadd { } parser { - include "src/main/jastadd/Preamble.parser" - include "src/main/jastadd/RelAst.parser" - include "src/main/jastadd/Ros2Rag.parser" + basedir ".." + include "ros2rag.base/src/main/jastadd/Preamble.parser" + include "relast.preprocessor/src/main/jastadd/RelAst.parser" + include "ros2rag.base/src/main/jastadd/Ros2Rag.parser" } } } diff --git a/src/main/jastadd/DumpTree.jrag b/src/main/jastadd/DumpTree.jrag deleted file mode 100644 index 4dd3985..0000000 --- a/src/main/jastadd/DumpTree.jrag +++ /dev/null @@ -1,53 +0,0 @@ -aspect DumpTree { - private static final String ASTNode.DUMP_TREE_INDENT = " "; - - public String ASTNode.dumpTree() { - java.io.ByteArrayOutputStream bytes = new java.io.ByteArrayOutputStream(); - dumpTree(new java.io.PrintStream(bytes)); - return bytes.toString(); - } - - public void ASTNode.dumpTree(java.io.PrintStream out) { - dumpTree(out, ""); - out.flush(); - } - - public void ASTNode.dumpTree(java.io.PrintStream out, String indent) { - out.print(indent + getClass().getSimpleName()); - out.print(getTokens()); - String extra = extraDumpInfo(); - if (!extra.isEmpty()) { - out.print(" " + extra); - } - out.println(); - String childIndent = indent + DUMP_TREE_INDENT; - for (ASTNode<?> child : astChildren()) { - if (child == null) { - out.println(childIndent + "null"); - } else { - child.dumpTree(out, childIndent); - } - } - } - - public String ASTNode.extraDumpInfo() { return ""; } - - public String ASTNode.getTokens() { - java.util.TreeSet<java.lang.reflect.Method> methods = new java.util.TreeSet<>(java.util.Comparator.comparing(java.lang.reflect.Method::getName)); - - methods.addAll(java.util.Arrays.asList(getClass().getMethods())); - - StringBuilder result = new StringBuilder(); - for (java.lang.reflect.Method method : methods) { - ASTNodeAnnotation.Token token = method.getAnnotation(ASTNodeAnnotation.Token.class); - if (token != null) { - try { - result.append(String.format(" %s=\"%s\"", token.name(), method.invoke(this))); - } catch (IllegalAccessException ignored) { - } catch (java.lang.reflect.InvocationTargetException ignored) { - } - } - } - return result.toString(); - } -} diff --git a/src/main/jastadd/NameResolution.jrag b/src/main/jastadd/NameResolution.jrag index 72b8522..17e3961 100644 --- a/src/main/jastadd/NameResolution.jrag +++ b/src/main/jastadd/NameResolution.jrag @@ -1,32 +1,5 @@ aspect NameResolution { - refine RefResolverStubs eq ASTNode.globallyResolveTypeDeclByToken(String id) = program().resolveTypeDecl(id); - - syn TypeDecl Program.resolveTypeDecl(String name) { - for (TypeDecl decl : typeDecls()) { - if (decl.getName().equals(name)) { - return decl; - } - } - throw new RuntimeException("TypeDecl " + name + " could not be resolved."); - } - - refine RefResolverStubs eq ASTNode.globallyResolveTokenComponentByToken(String id) { - // return a TokenComponent. id is of the form 'type_name + "." + token_name' - int dotIndex = id.indexOf("."); - String typeName = id.substring(0, dotIndex); - String tokenName = id.substring(dotIndex + 1); - TypeDecl type = program().resolveTypeDecl(typeName); - // iterate over components and find the matching tokenComponent - for (Component comp : type.getComponentList()) { - if (comp.isTokenComponent() && comp.getName().equals(tokenName)) { - return comp.asTokenComponent(); - } - } - System.err.println("Could not resolve TokenComponent '" + id + "'."); - return null; - } - refine RefResolverStubs eq UpdateDefinition.resolveMappingByToken(String id) { // return a MappingDefinition for (MappingDefinition mappingDefinition : ros2rag().getMappingDefinitionList()) { diff --git a/src/main/jastadd/Navigation.jrag b/src/main/jastadd/Navigation.jrag index 4b233c2..250ea9b 100644 --- a/src/main/jastadd/Navigation.jrag +++ b/src/main/jastadd/Navigation.jrag @@ -1,46 +1,10 @@ aspect Navigation { // --- program --- - inh Program ASTNode.program(); - eq Program.getChild().program() = this; eq Ros2Rag.getChild().program() = getProgram(); // --- ros2rag inh Ros2Rag ASTNode.ros2rag(); eq Ros2Rag.getChild().ros2rag() = this; - // --- typeDecls --- - coll java.util.Set<TypeDecl> Program.typeDecls() [new java.util.HashSet<>()] root Program; - TypeDecl contributes this - to Program.typeDecls() - for program(); - - // --- relations --- - coll java.util.Set<Relation> Program.relations() [new java.util.HashSet<>()] root Program; - Relation contributes this - to Program.relations() - for program(); - - // --- containingTypeDecl --- - inh TypeDecl Component.containingTypeDecl(); - eq TypeDecl.getChild().containingTypeDecl() = this; - -// syn boolean RelationComponent.multiplicityOne() = false; -// eq OneRelationComponent.multiplicityOne() = true; -// syn boolean RelationComponent.multiplicityOpt() = false; -// eq OptionalRelationComponent.multiplicityOpt() = true; -// syn boolean RelationComponent.multiplicityMany() = false; -// eq ManyRelationComponent.multiplicityMany() = true; - - // --- containedFile --- - inh GrammarFile ASTNode.containedFile(); - eq GrammarFile.getChild().containedFile() = this; - - // --- isTokenComponent --- - syn boolean Component.isTokenComponent() = false; - eq TokenComponent.isTokenComponent() = true; - - // --- asTokenComponent --- - syn TokenComponent Component.asTokenComponent() = null; - eq TokenComponent.asTokenComponent() = this; } diff --git a/src/main/jastadd/RelAst.parser b/src/main/jastadd/RelAst.parser deleted file mode 100644 index f94fbef..0000000 --- a/src/main/jastadd/RelAst.parser +++ /dev/null @@ -1,218 +0,0 @@ -GrammarFile goal - = declaration.d goal.p {: p.getDeclarationList().insertChild(d, 0); return p; :} - | {: return new GrammarFile(); :} -; - -Declaration declaration - = type_decl - | relation - | comment -; - -Comment comment - = COMMENT {: return new Comment(COMMENT); :}; - -TypeDecl type_decl - = ID components_opt.c SCOL - {: - TypeDecl result = new TypeDecl(); - result.setName(ID); - result.setAbstract(false); - result.setComponentList(c); - return result; - :} - | ID COL ID.s components_opt.c SCOL - {: - TypeDecl result = new TypeDecl(); - result.setName(ID); - result.setAbstract(false); - result.setSuperType(TypeDecl.createRef(s)); - result.setComponentList(c); - return result; - :} - | ABSTRACT ID components_opt.c SCOL - {: - TypeDecl result = new TypeDecl(); - result.setName(ID); - result.setAbstract(true); - result.setComponentList(c); - return result; - :} - | ABSTRACT ID COL ID.s components_opt.c SCOL - {: - TypeDecl result = new TypeDecl(); - result.setName(ID); - result.setAbstract(true); - result.setSuperType(TypeDecl.createRef(s)); - result.setComponentList(c); - return result; - :} -; - -JastAddList components_opt - = /* empty */ {: return new JastAddList(); :} - | ASSIGN components.l {: return l; :} -; - -JastAddList components - = /* empty */ {: return new JastAddList(); :} - | components.l component.c {: return l.add(c); :} -; - -Component component - = SLASH actual_component.c SLASH - {: - c.setNTA(true); - return c; - :} - | actual_component -; - -Component actual_component - = ID.name COL ID.type STAR - {: - ListComponent result = new ListComponent(); - result.setName(name); - result.setTypeDecl(TypeDecl.createRef(type)); - return result; - :} - | ID.name COL ID.type - {: - NormalComponent result = new NormalComponent(); - result.setName(name); - result.setTypeDecl(TypeDecl.createRef(type)); - return result; - :} - | ID.type STAR - {: - ListComponent result = new ListComponent(); - result.setName(type); - result.setTypeDecl(TypeDecl.createRef(type)); - return result; - :} - | ID.type - {: - NormalComponent result = new NormalComponent(); - result.setName(type); - result.setTypeDecl(TypeDecl.createRef(type)); - return result; - :} - | LBRACKET ID.name COL ID.type RBRACKET - {: - OptComponent result = new OptComponent(); - result.setName(name); - result.setTypeDecl(TypeDecl.createRef(type)); - return result; - :} - | LBRACKET ID.type RBRACKET - {: - OptComponent result = new OptComponent(); - result.setName(type); - result.setTypeDecl(TypeDecl.createRef(type)); - return result; - :} - | LT ID.name COL java_type_use.type GT - {: - TokenComponent result = new TokenComponent(); - result.setName(name); - result.setJavaTypeUse(type); - return result; - :} - | LT ID.type GT - {: - TokenComponent result = new TokenComponent(); - result.setName(type); - result.setJavaTypeUse(new SimpleJavaTypeUse(type)); - return result; - :} -; - - -JavaTypeUse java_type_use - = parameterized_java_type_use - | simple_java_type_use -; - -ArrayList qualified_name - = ID - | qualified_name DOT ID -; - - -JastAddList java_type_use_list - = java_type_use.u {: return new JastAddList().add(u); :} - | java_type_use_list.l COMMA java_type_use.u {: return l.add(u); :} -; - -SimpleJavaTypeUse simple_java_type_use - = qualified_name.n - {: - return new SimpleJavaTypeUse((String)n.stream().map( x -> ((Symbol)x).value.toString()).collect(java.util.stream.Collectors.joining("."))); - :} -; - -ParameterizedJavaTypeUse parameterized_java_type_use - = simple_java_type_use.i LT java_type_use_list.l GT - {: - return new ParameterizedJavaTypeUse(i.getName(), l); - :} -; - -Relation relation - = RELATION unnamed_role.a LEFT navigable_role.b SCOL - {: - LeftDirectedRelation result = new LeftDirectedRelation(); - result.setSource(b); - result.setTarget(a); - return result; - :} - | RELATION navigable_role.a RIGHT unnamed_role.b SCOL - {: - RightDirectedRelation result = new RightDirectedRelation(); - result.setSource(a); - result.setTarget(b); - return result; - :} - | RELATION navigable_role.a BIDIRECTIONAL navigable_role.b SCOL - {: - BidirectionalRelation result = new BidirectionalRelation(); - result.setLeft(a); - result.setRight(b); - return result; - :} -; - - -UnnamedRole unnamed_role - = ID.type - {: - UnnamedRole result = new UnnamedRole(); - result.setType(TypeDecl.createRef(type)); - return result; - :} - | navigable_role -; - -NavigableRole navigable_role - = ID.type DOT ID.name - {: - NormalRole result = new NormalRole(); - result.setName(name); - result.setType(TypeDecl.createRef(type)); - return result; - :} - | ID.type DOT ID.name STAR - {: - ListRole result = new ListRole(); - result.setName(name); - result.setType(TypeDecl.createRef(type)); - return result; - :} - | ID.type DOT ID.name QUESTION_MARK - {: - OptRole result = new OptRole(); - result.setName(name); - result.setType(TypeDecl.createRef(type)); - return result; - :} -; diff --git a/src/main/jastadd/RelAst.relast b/src/main/jastadd/RelAst.relast deleted file mode 100644 index 2168413..0000000 --- a/src/main/jastadd/RelAst.relast +++ /dev/null @@ -1,49 +0,0 @@ - - -Program ::= GrammarFile *; - -abstract Grammar ::= Declaration*; -GrammarFile : Grammar ::= <FileName> ; - -abstract Declaration; - -TypeDecl:Declaration ::= <Name> <Abstract:boolean> Component*; - -rel TypeDecl.SuperType? <-> TypeDecl.SubType*; - -abstract Component ::= <Name> <NTA:boolean>; -abstract TypeComponent : Component; - -rel TypeComponent.TypeDecl <-> TypeDecl.PotentialParent*; - -NormalComponent : TypeComponent; -ListComponent : TypeComponent; -OptComponent : TypeComponent; - -TokenComponent : Component ::= JavaTypeUse; - -abstract JavaTypeUse ::= <Name>; -SimpleJavaTypeUse : JavaTypeUse; -ParameterizedJavaTypeUse : JavaTypeUse ::= JavaTypeUse*; - -abstract Relation : Declaration; -// rel Source.Name -> Target; -// rel Target <- Source.Name; -abstract DirectedRelation : Relation ::= Source:NavigableRole Target:UnnamedRole ; -LeftDirectedRelation : DirectedRelation; -RightDirectedRelation : DirectedRelation; -// rel Left.LeftName <-> Right.RightName; -BidirectionalRelation : Relation ::= Left:NavigableRole Right:NavigableRole ; - -abstract Role; -abstract NavigableRole : Role ::= <Name>; -NormalRole : NavigableRole; -ListRole : NavigableRole; -OptRole : NavigableRole; - -UnnamedRole : Role ; - -rel Role.Type <-> TypeDecl.Role*; - -// comments -Comment : Declaration ::= <Text>; diff --git a/src/main/jastadd/backend/AbstractGrammar.jadd b/src/main/jastadd/backend/AbstractGrammar.jadd deleted file mode 100644 index 606be6e..0000000 --- a/src/main/jastadd/backend/AbstractGrammar.jadd +++ /dev/null @@ -1,171 +0,0 @@ -aspect BackendAbstractGrammar { - - public static String ASTNode.listInterface = "java.util.List"; - public static String ASTNode.listClass = "java.util.ArrayList"; - public static String ASTNode.jastAddListType = "List"; - public static String ASTNode.jastAddOptType = "Opt"; - - public String Program.generateAbstractGrammar() { - StringBuilder sb = new StringBuilder(); - generateAbstractGrammar(sb); - return sb.toString(); - } - - public void Program.generateAbstractGrammar(StringBuilder b) { - for (GrammarFile file : getGrammarFileList()) { - file.generateAbstractGrammar(b); - } - } - - public void GrammarFile.generateAbstractGrammar(StringBuilder b) { - b.append("// Grammar for file ").append(getFileName()).append("\n"); - super.generateAbstractGrammar(b); - b.append("\n"); - } - - public void Grammar.generateAbstractGrammar(StringBuilder b) { - - for (Declaration decl : getDeclarationList()) { - decl.generateAbstractGrammar(b); - } - } - - abstract public void Declaration.generateAbstractGrammar(StringBuilder b); - - public void Comment.generateAbstractGrammar(StringBuilder b) { - b.append(getText()).append("\n"); - } - - public void TypeDecl.generateAbstractGrammar(StringBuilder b) { - if (getAbstract()) { - b.append("abstract "); - } - b.append(getName()).append(" "); - if (hasSuperType()) { - b.append(": ").append(getSuperType().getName()).append(" "); - } - b.append("::="); - for (Component component : getComponentList()) { - b.append(" "); - component.generateAbstractGrammar(b); - } - b.append(";\n"); - } - - public abstract void Component.generateAbstractGrammar(StringBuilder b); - - public void NormalComponent.generateAbstractGrammar(StringBuilder b) { - if (getNTA()) { - b.append("/"); - } - - if (!getName().equals("")) { - b.append(getName()).append(":"); - } - b.append(getTypeDecl().getName()); - if (getNTA()) { - b.append("/"); - } - } - - public void ListComponent.generateAbstractGrammar(StringBuilder b) { - if (getNTA()) { - b.append("/"); - } - - if (!getName().equals("")) { - b.append(getName()).append(":"); - } - b.append(getTypeDecl().getName()).append("*"); - if (getNTA()) { - b.append("/"); - } - } - - public void OptComponent.generateAbstractGrammar(StringBuilder b) { - if (getNTA()) { - b.append("/"); - } - b.append("["); - if (!getName().equals("")) { - b.append(getName()).append(":"); - } - b.append(getTypeDecl().getName()).append("]"); - if (getNTA()) { - b.append("/"); - } - } - - public void TokenComponent.generateAbstractGrammar(StringBuilder b) { - if (getNTA()) { - b.append("/"); - } - b.append("<"); - if (!getName().equals("")) { - b.append(getName()).append(":"); - } - getJavaTypeUse().generateAbstractGrammar(b); - b.append(">"); - if (getNTA()) { - b.append("/"); - } - } - - abstract public void JavaTypeUse.generateAbstractGrammar(StringBuilder b); - - public void SimpleJavaTypeUse.generateAbstractGrammar(StringBuilder b) { - b.append(getName()); - } - - public void ParameterizedJavaTypeUse.generateAbstractGrammar(StringBuilder b) { - b.append("<"); - boolean first = true; - for (JavaTypeUse javaTypeUse : getJavaTypeUseList()) { - if (first) { - first = false; - } else { - b.append(", "); - } - javaTypeUse.generateAbstractGrammar(b); - } - b.append(">"); - } - - abstract public void Relation.generateAbstractGrammar(StringBuilder b); - - public void DirectedRelation.generateAbstractGrammar(StringBuilder b) { - b.append("rel "); - getSource().generateAbstractGrammar(b); - b.append(" -> "); - getTarget().generateAbstractGrammar(b); - b.append(";\n"); - } - - public void BidirectionalRelation.generateAbstractGrammar(StringBuilder b) { - b.append("rel "); - getLeft().generateAbstractGrammar(b); - b.append(" <-> "); - getRight().generateAbstractGrammar(b); - b.append(";\n"); - } - - abstract public void Role.generateAbstractGrammar(StringBuilder b); - - public void NormalRole.generateAbstractGrammar(StringBuilder b) { - b.append(getType().getName()).append(".").append(getName()); - } - - public void ListRole.generateAbstractGrammar(StringBuilder b) { - b.append(getType().getName()).append(".").append(getName()).append("*"); - } - - public void OptRole.generateAbstractGrammar(StringBuilder b) { - b.append(getType().getName()).append(".").append(getName()).append("?"); - } - - public void UnnamedRole.generateAbstractGrammar(StringBuilder b) { - b.append(getType().getName()); - } - - -} -- GitLab