Skip to content
Snippets Groups Projects
Select Git revision
  • e0e975cc5fc7f899ca463da7ac3d01c3ca0c853e
  • master default protected
  • develop
  • bugfix/missing-newline-parse-error
  • jastadd-fix-inc-param-debug
  • jastadd-2.3.5
  • 1.0.0-pre-release.alpha
7 results

AbstractGrammar.jadd

Blame
  • AbstractGrammar.jadd 4.46 KiB
    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 String GrammarFile.generateAbstractGrammar() {
        StringBuilder sb = new StringBuilder();
        generateAbstractGrammar(sb);
        return sb.toString();
      }
    
      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());
      }
    
    
    }