coins.ffront
Class EquivManager.EquivGroup

java.lang.Object
  extended bycoins.ffront.EquivManager.EquivGroup
Enclosing class:
EquivManager

class EquivManager.EquivGroup
extends java.lang.Object

Equivalence group.

    ex) (A B) (B C) is group "(A B C)"

    each of the equivalence variables has "height"
    (in this case, all var's heights are 0)

    ex) (A(2), B(3), C) (all vars is real type)
        A's heigth is 4.
        B's height is 0.
        C's        is 8. (real type 1 word is 4 bytes).

    as C notation.

    union{
      struct{
        char padding[4]
        real var;
      }A;
      struct{
        real var;
      }B;
      struct{
        char padding[4]
        real var;
      }C;
    }equiv1;

    ex) If Common variable and Equivalence variable mix, modify global common
        block union(region)type like this:
    f:
    common /B1/ a,b
    equivalence (a,x), (b,y)

    => Global Scope
    union{
      struct{
        real a;
        real b;
      } unit_name_A;

      union{
        struct{
          real var;
        }x;
      }unit_name_A_x;

      union{
        struct{
          real padding[1];
          real var;
        }y;
      }unit_name_A_y;

    } BlockA;

    access to x:
      BlockA.unit_name_A_a.x.var;
    


Nested Class Summary
(package private)  class EquivManager.EquivGroup.EquivElem
          equiv element class.
 
Field Summary
(package private)  java.util.Map table_
           
 
Constructor Summary
(package private) EquivManager.EquivGroup(FirList vars)
          build equiv group with some equivalence variables
 
Method Summary
(package private)  void addElems(FirList vars)
          add new equivalence group.
(package private)  void addElems(FirList vars, int base)
          with base
(package private)  void addIDsToTable(Var v)
           
(package private)  Elem addUnionElem(EquivManager.EquivGroup.EquivElem ee, int max, SymTable c_table)
           
(package private)  int getHeight(java.lang.String ident)
           
(package private)  int getMaxHeight()
           
(package private)  int getNodeHeight(Node n)
           
(package private)  java.lang.String getNodeLexem(Node n)
          Node must be type Token or Pair.
(package private)  Type getNodeType(Node n)
           
(package private)  boolean isContainNode(Node n)
          (A B C) + B => true
(package private)  boolean isContainNodes(FirList vars)
          (A B C) + (B X) => true
(package private)  Type makeEquivTypeUnder(SymTable c_table)
           
(package private)  java.lang.String searchBlockVariable()
          If contain block(common) variable, return this indentifier.
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

table_

java.util.Map table_
Constructor Detail

EquivManager.EquivGroup

EquivManager.EquivGroup(FirList vars)
build equiv group with some equivalence variables

Method Detail

addIDsToTable

void addIDsToTable(Var v)

addElems

void addElems(FirList vars)
add new equivalence group. new group must be related with this equiv group


addElems

void addElems(FirList vars,
              int base)
with base


getNodeHeight

int getNodeHeight(Node n)

getHeight

int getHeight(java.lang.String ident)

getMaxHeight

int getMaxHeight()

searchBlockVariable

java.lang.String searchBlockVariable()
If contain block(common) variable, return this indentifier. If not, return null.


makeEquivTypeUnder

Type makeEquivTypeUnder(SymTable c_table)

addUnionElem

Elem addUnionElem(EquivManager.EquivGroup.EquivElem ee,
                  int max,
                  SymTable c_table)

isContainNode

boolean isContainNode(Node n)
(A B C) + B => true


isContainNodes

boolean isContainNodes(FirList vars)
(A B C) + (B X) => true


getNodeLexem

java.lang.String getNodeLexem(Node n)
Node must be type Token or Pair.


getNodeType

Type getNodeType(Node n)

toString

public java.lang.String toString()