Changeset 4171


Ignore:
Timestamp:
Sep 13, 2014, 3:21:37 AM (5 years ago)
Author:
ksherdy
Message:

Added b2k accessors and generators as required.

Location:
proto/s2k/trunk/framework/src/toolchain/b2k/ast
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • proto/s2k/trunk/framework/src/toolchain/b2k/ast/Accessors.java

    r4110 r4171  
    517517       
    518518        ////////////////////////////////////////////////////////////////////////////
    519         // BitField Type
     519        // BitField Type - Deprecated
    520520        ////////////////////////////////////////////////////////////////////////////   
    521         public static String bitFieldLexeme(BitFieldTypeNode node) {           
    522                 return node.getToken().getPrintableLexeme();
    523         }       
     521//      public static String bitFieldLexeme(BitFieldTypeNode node) {           
     522//              return node.getToken().getPrintableLexeme();
     523//      }       
    524524
    525525        ////////////////////////////////////////////////////////////////////////////
     
    531531       
    532532        ////////////////////////////////////////////////////////////////////////////
    533         // Void Type
     533        // Void Type - Deprecated
    534534        ////////////////////////////////////////////////////////////////////////////   
    535         public static String voidLexeme(VoidTypeNode node) {           
    536                 return node.getToken().getPrintableLexeme();
    537         }       
    538 
    539         ////////////////////////////////////////////////////////////////////////////
    540         // Bool Type
     535//      public static String voidLexeme(VoidTypeNode node) {           
     536//              return node.getToken().getPrintableLexeme();
     537//      }       
     538
     539        ////////////////////////////////////////////////////////////////////////////
     540        // Bool Type - Deprecated
    541541        ////////////////////////////////////////////////////////////////////////////           
    542         public static String boolLexeme(BoolTypeNode node) {           
    543                 return node.getToken().getPrintableLexeme();
    544         }       
     542//      public static String boolLexeme(BoolTypeNode node) {           
     543//              return node.getToken().getPrintableLexeme();
     544//      }       
    545545
    546546        ////////////////////////////////////////////////////////////////////////////
     
    663663    public static final ASTNode NO_ENCLOSING_NODE = null;
    664664
     665
    665666    public static BlockStmtNode getEnclosingBlockStmt(ASTNode node) {
    666667        BlockStmtNode enclosingBlockStmt = (BlockStmtNode) getEnclosingNodeOfType(node, BlockStmtNode.class);
     
    668669        return enclosingBlockStmt;
    669670    }
    670 
     671   
     672    public static ASTNode getEnclosingStmtWithinBlockStmt(ASTNode node) {
     673       
     674        assert hasEnclosingBlockStmt(node) : "getEnclosingBlockStmt(node) has no ancestor of type 'BlockStmtNode'";
     675       
     676        ASTNode lastExpr = node;
     677        ASTNode current = node.getParent();
     678        while(!(current instanceof BlockStmtNode)) {
     679           
     680            if(current instanceof IfStmtNode || current instanceof WhileStmtNode || current instanceof ReturnStmtNode || current instanceof AssignNode) {
     681                return current;
     682            }
     683           
     684            lastExpr = current;
     685            current = current.getParent();
     686        }
     687
     688        return lastExpr;
     689   
     690    }
     691    public static boolean hasEnclosingBlockStmt(ASTNode node) {
     692        return hasEnclosingNodeOfType(node, BlockStmtNode.class);
     693    }   
     694   
     695    public static boolean hasEnclosingWhileStmt(ASTNode node) {
     696        return hasEnclosingNodeOfType(node, WhileStmtNode.class);
     697    }
     698   
     699    public static boolean hasEnclosingIfStmt(ASTNode node) {
     700        return hasEnclosingNodeOfType(node, IfStmtNode.class);
     701    }
     702
     703    public static boolean hasEnclosingReturnStmt(ASTNode node) {
     704        return hasEnclosingNodeOfType(node, ReturnStmtNode.class);
     705    }   
     706
     707    public static boolean hasEnclosingAssignmentStmt(ASTNode node) {
     708        return hasEnclosingNodeOfType(node, AssignNode.class);
     709    }       
     710       
     711   
     712    public static boolean hasEnclosingNodeOfType(ASTNode node, Class<?> clazz) {
     713        if(getEnclosingNodeOfType(node, clazz) != NO_ENCLOSING_NODE) {
     714            return true;
     715        } else {
     716            return false;
     717        }
     718    }   
     719   
    671720    public static ASTNode getEnclosingNodeOfType(ASTNode node, Class<?> clazz) {
    672721        ASTNode current = node.getParent();
     
    680729        return NO_ENCLOSING_NODE;
    681730    }   
    682        
     731
     732    public static ASTNode getEnclosingNodeOfTypes(ASTNode node, List<Class <?> > clazzes) {
     733        ASTNode current = node.getParent();
     734        while(current != NO_ENCLOSING_NODE) {
     735            for(Class <?> clazz: clazzes) {
     736                if(current.getClass().isAssignableFrom(clazz)) {
     737                    return current;
     738                }
     739            }
     740            current = current.getParent();
     741        }
     742        return NO_ENCLOSING_NODE;
     743    }   
    683744}
  • proto/s2k/trunk/framework/src/toolchain/b2k/ast/Generators.java

    r4024 r4171  
    417417    }
    418418   
     419    public static BitBlockTypeNode makeBitBlockType(Locator locator) {
     420        Token token = Generators.makeLextantToken(locator, Lextant.BITBLOCK);
     421        return new BitBlockTypeNode(token);
     422    }
     423       
     424    public static VarDeclNode makeVarDeclNode(Locator locator, ASTNode type, ASTNode lhs) {
     425        Token assignToken = Generators.makeLextantToken(locator, Lextant.ASSIGN);
     426        VarDeclNode localVarDecl = new VarDeclNode(assignToken);
     427        localVarDecl.appendChild(type);
     428        localVarDecl.appendChild(lhs);
     429        return localVarDecl;
     430    }   
     431   
    419432    ///////////////////////////////////////////////////////////////////
    420     // Type nodes
     433    // Type nodes  - Deprecated
    421434    // 
    422     public static VoidTypeNode makeVoidTypeNode(Locator locator) {
    423             Token voidTypeToken = Generators.makeLextantToken(locator, b2k.lexicalAnalyzer.Lextant.VOID);
    424             return new VoidTypeNode(voidTypeToken);
    425     }
     435//    public static VoidTypeNode makeVoidTypeNode(Locator locator) {
     436//          Token voidTypeToken = Generators.makeLextantToken(locator, b2k.lexicalAnalyzer.Lextant.VOID);
     437//          return new VoidTypeNode(voidTypeToken);
     438//    }
    426439               
    427440    ///////////////////////////////////////////////////////////////////
Note: See TracChangeset for help on using the changeset viewer.