Changeset 12 in default for trunk/de.ugoe.cs.swe.bnftools.ebnf.ui


Ignore:
Timestamp:
10/22/10 15:45:35 (14 years ago)
Author:
zeiss
Message:
 
Location:
trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/EbnfFormatterVisitor.java

    r11 r12  
    33import org.eclipse.emf.common.util.EList; 
    44import org.eclipse.emf.ecore.EObject; 
    5  
    6 import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Import; 
    75 
    86import de.ugoe.cs.swe.bnftools.ebnf.Atom; 
     
    1311import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence; 
    1412import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator; 
     13import de.ugoe.cs.swe.bnftools.ebnf.Import; 
    1514import de.ugoe.cs.swe.bnftools.ebnf.MergeRule; 
    1615import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence; 
     
    2928        private FormatterConfig config; 
    3029 
     30        int ruleCounter = 0; 
     31         
    3132        public EbnfFormatterVisitor(EObject rootNode, FormatterConfig config) { 
    3233                super(rootNode); 
     
    6768 
    6869        protected void visitAfter(Term node) { 
    69                 SingleDefinition parent = (SingleDefinition) node.eContainer(); 
    70                 int index = parent.getTerms().indexOf(node); 
    71                 if ((parent.getTerms().size() > 0) && (index < parent.getTerms().size()-1)) 
     70                if (!isLastElement()) 
    7271                        buf.append(" "); 
    7372        } 
     
    106105 
    107106        protected void visitBefore(Import node) { 
     107                buf.append("import \"" + node.getImportURI() + "\";\n"); 
    108108        } 
    109109 
     
    118118 
    119119        protected void visitBefore(OptionalSequence node) { 
     120                buf.append("["); 
    120121        } 
    121122 
    122123        protected void visitAfter(OptionalSequence node) { 
     124                buf.append("]"); 
    123125        } 
    124126 
    125127        protected void visitBefore(RepeatedSequence node) { 
     128                buf.append("{"); 
    126129        } 
    127130 
    128131        protected void visitAfter(RepeatedSequence node) { 
     132                buf.append("}"); 
     133                if (node.isMorethanonce()) 
     134                        buf.append("+"); 
    129135        } 
    130136 
    131137        protected void visitBefore(Rule node) { 
     138                if (ruleCounter == 0) 
     139                        buf.append("\n"); 
     140                 
     141                ruleCounter++; 
    132142                if (node.getRulenumber() > 0) 
    133143                        buf.append(node.getRulenumber() + ". "); 
     
    147157 
    148158        protected void visitBefore(RuleReference node) { 
     159                buf.append(node.getRuleref().getName()); 
    149160        } 
    150161 
     
    162173 
    163174        protected void visitAfter(SingleDefinition node) { 
     175                if (!isLastElement()) 
     176                        buf.append(" | "); 
     177                 
    164178        } 
    165179 
     
    168182                        buf.append("\"" + node.getLiteral() + "\""); 
    169183                else if (node.getColon() != null) 
    170                         buf.append(" " + node.getColon()); 
     184                        buf.append("\"\"\""); 
    171185        } 
    172186 
  • trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/visitor/EbnfVisitor.java

    r11 r12  
    11package de.ugoe.cs.swe.bnftools.visitor; 
    22 
     3import java.util.Stack; 
     4 
    35import org.eclipse.emf.ecore.EObject; 
    4  
    5 import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Import; 
    66 
    77import de.ugoe.cs.swe.bnftools.ebnf.Atom; 
     
    1212import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence; 
    1313import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator; 
     14import de.ugoe.cs.swe.bnftools.ebnf.Import; 
    1415import de.ugoe.cs.swe.bnftools.ebnf.MergeRule; 
    1516import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence; 
     
    2627         
    2728        protected EObject rootNode = null; 
    28  
     29        protected Stack<Boolean> lastElementStack = new Stack<Boolean>(); 
     30         
    2931        public EbnfVisitor() { 
    3032        } 
     
    4648 
    4749        private void acceptInner(EObject node) { 
     50                Boolean lastElement = false; 
     51                if (node.eContents().size() == 0) 
     52                        lastElement = true; 
     53                lastElementStack.push(lastElement);              
    4854                for (int i=0; i < node.eContents().size(); i++) { 
    4955                        EObject currentNode = (EObject) node.eContents().get(i); 
     56                        if (i == node.eContents().size()-1) { 
     57                                lastElement = true; 
     58                                lastElementStack.pop(); 
     59                                lastElementStack.push(lastElement); 
     60                        } 
    5061                        dispatcherBefore(currentNode); 
    5162                        acceptInner(currentNode); 
    5263                        dispatcherAfter(currentNode); 
    5364                } 
     65                lastElementStack.pop(); 
     66        } 
     67         
     68        protected boolean isLastElement() { 
     69                return lastElementStack.peek(); 
    5470        } 
    5571         
Note: See TracChangeset for help on using the changeset viewer.