Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/sablecc/sablecc/AltTransformAdapter.java


1   /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2    * This file is part of SableCC.                             *
3    * See the file "LICENSE" for copyright information and the  *
4    * terms and conditions for copying, distribution and        *
5    * modification of SableCC.                                  *
6    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
7   
8   package org.sablecc.sablecc;
9   
10  import java.util.*;
11  import org.sablecc.sablecc.analysis.*;
12  import org.sablecc.sablecc.node.*;
13  import java.io.*;
14  
15  public class AltTransformAdapter extends DepthFirstAdapter
16  {
17    ResolveAltIds altIds;
18    String currentNewAltName;
19  
20    private Map isElementIsAlist;
21  
22    private LinkedList listSimpleTermTransform;
23    private Map simpleTermTransform;
24    private Map simpleTermOrsimpleListTermTypes;
25  
26    AltTransformAdapter(Map simpleTermTransform,
27                        LinkedList listSimpleTermTransform,
28                        String currentNewAltName,
29                        ResolveAltIds altIds, Map isElementIsAlist,
30                        Map simpleTermOrsimpleListTermTypes)
31    {
32      this.currentNewAltName = currentNewAltName;
33      this.altIds = altIds;
34      this.isElementIsAlist = isElementIsAlist;
35      this.listSimpleTermTransform = listSimpleTermTransform;
36      this.simpleTermTransform = simpleTermTransform;
37      this.simpleTermOrsimpleListTermTypes = simpleTermOrsimpleListTermTypes;
38    }
39  
40    public void inASimpleTerm(ASimpleTerm node)
41    {
42      String name = node.getId().getText();
43  
44      if( !((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains(name) &&
45          !((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains("$"+name) )
46      {
47        node.replaceBy( new ANullTerm() );
48      }
49  
50      if( isElementIsAlist.get(currentNewAltName+name) != null )
51      {
52        TId simpleTermTail;
53        if(node.getSimpleTermTail() != null)
54        {
55          simpleTermTail = node.getSimpleTermTail();
56        }
57        else
58        {
59          simpleTermTail = new TId( (String)isElementIsAlist.get(currentNewAltName+name) );
60        }
61  
62        ASimpleTerm asimpleTerm = new ASimpleTerm( node.getSpecifier(), node.getId(), simpleTermTail);
63  
64        if(simpleTermOrsimpleListTermTypes.get(node) != null)
65        {
66          simpleTermOrsimpleListTermTypes.put(asimpleTerm, (String)simpleTermOrsimpleListTermTypes.get(node));
67        }
68  
69        node.replaceBy(asimpleTerm);
70        simpleTermTransform.put(asimpleTerm, "L"+ResolveIds.name((String)isElementIsAlist.get(currentNewAltName+name)) );
71  
72        //Terms are added here only if they were implicitely transformed
73        listSimpleTermTransform.add( asimpleTerm );
74      }
75    }
76  
77    public void inASimpleListTerm(ASimpleListTerm node)
78    {
79      String name = node.getId().getText();
80  
81      if( !((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains(name) &&
82          !((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains("$"+name) )
83      {
84        node.replaceBy( null );
85      }
86  
87      if( isElementIsAlist.get(currentNewAltName+name) != null)
88      {
89        TId simpleTermTail;
90        if(node.getSimpleTermTail() != null)
91        {
92          simpleTermTail = node.getSimpleTermTail();
93        }
94        else
95        {
96          simpleTermTail = new TId((String)isElementIsAlist.get(currentNewAltName+name));
97        }
98  
99        TId tid;
100       tid = ( ((LinkedList)altIds.alts_elems_list_elemName.get(currentNewAltName)).contains(name) ?
101               node.getId() : new TId( "$" + node.getId().getText() ) );
102 
103       ASimpleListTerm asimpleListTerm = new ASimpleListTerm( node.getSpecifier(), tid, simpleTermTail);
104 
105       if(simpleTermOrsimpleListTermTypes.get(node) != null)
106       {
107         simpleTermOrsimpleListTermTypes.put(asimpleListTerm, (String)simpleTermOrsimpleListTermTypes.get(node));
108       }
109 
110       node.replaceBy(asimpleListTerm);
111       simpleTermTransform.put(asimpleListTerm, "L"+ResolveIds.name((String)isElementIsAlist.get(currentNewAltName+name) ));
112 
113       //Terms are added here only if they were implicitely transformed
114       listSimpleTermTransform.add( asimpleListTerm );
115     }
116   }
117 
118   public void outAListTerm(AListTerm node)
119   {
120     if( (node.getListTerms() != null) && (node.getListTerms().size() > 0) )
121     {
122       Object[] temp = node.getListTerms().toArray();
123 
124       if(simpleTermTransform.get(temp[0]) != null)
125       {
126         String firstTermType = (String)simpleTermTransform.get(temp[0]);
127 
128         if(firstTermType != null)
129         {
130           if(!firstTermType.startsWith("L"))
131           {
132             simpleTermTransform.put(node, "L" + firstTermType);
133           }
134           else
135           {
136             simpleTermTransform.put(node, firstTermType);
137           }
138         }
139       }
140     }
141   }
142 
143 }