Ignore:
Timestamp:
Jun 3, 2013, 8:06:21 AM (6 years ago)
Author:
shermer
Message:

beginning to implement typechecking.

Location:
proto/pabloj/trunk/src
Files:
5 added
8 edited

Legend:

Unmodified
Added
Removed
  • proto/pabloj/trunk/src/pabloS/ast/CompoundIdentifierNode.java

    r3004 r3254  
    1010import java.util.List;
    1111
     12import toolchain.pabloS.semanticAnalyzer.Binding;
    1213
    1314
    14 public class CompoundIdentifierNode extends ASTNode  {
     15public class CompoundIdentifierNode extends ASTNode implements HasBindingNodeType {
     16        private Binding binding = null;
    1517
    1618
     
    2022        public CompoundIdentifierNode(CompoundIdentifierNode node) {
    2123                super(node);
     24                this.binding = node.binding;
    2225
    2326        }
     
    3841        // attribute accessors
    3942
     43        public Binding getBinding() {
     44                return binding;
     45        }
     46        public void setBinding(Binding _value_) {
     47                binding = _value_;
     48        }
     49       
    4050
    4151       
     
    4959                        result += ", ";
    5060                }
     61                result += "binding = " + binding + ", ";
    5162
    5263                if(result.isEmpty()) return result;
  • proto/pabloj/trunk/src/pabloS/ast/FuncDefNode.java

    r3249 r3254  
    1010import java.util.List;
    1111
     12import toolchain.pabloS.semanticAnalyzer.SymbolTable;
    1213
    1314
    14 public class FuncDefNode extends ASTNode  {
     15public class FuncDefNode extends ASTNode implements HasSymbolTableNodeType {
     16        private SymbolTable symbolTable = null;
    1517
    1618
     
    2022        public FuncDefNode(FuncDefNode node) {
    2123                super(node);
     24                this.symbolTable = node.symbolTable;
    2225
    2326        }
     
    3841        // attribute accessors
    3942
     43        public SymbolTable getSymbolTable() {
     44                return symbolTable;
     45        }
     46        public void setSymbolTable(SymbolTable _value_) {
     47                symbolTable = _value_;
     48        }
     49       
    4050
    4151       
     
    4959                        result += ", ";
    5060                }
     61                result += "symbolTable = " + symbolTable + ", ";
    5162
    5263                if(result.isEmpty()) return result;
  • proto/pabloj/trunk/src/pabloS/ast/IdentifierNode.java

    r3004 r3254  
    1010import java.util.List;
    1111
     12import toolchain.pabloS.semanticAnalyzer.Binding;
    1213
    1314
    14 public class IdentifierNode extends ASTNode  {
     15public class IdentifierNode extends ASTNode implements HasBindingNodeType {
     16        private Binding binding = null;
    1517
    1618
     
    2022        public IdentifierNode(IdentifierNode node) {
    2123                super(node);
     24                this.binding = node.binding;
    2225
    2326        }
     
    3841        // attribute accessors
    3942
     43        public Binding getBinding() {
     44                return binding;
     45        }
     46        public void setBinding(Binding _value_) {
     47                binding = _value_;
     48        }
     49       
    4050
    4151       
     
    4959                        result += ", ";
    5060                }
     61                result += "binding = " + binding + ", ";
    5162
    5263                if(result.isEmpty()) return result;
  • proto/pabloj/trunk/src/pabloS/ast/ProgramNode.java

    r3004 r3254  
    1010import java.util.List;
    1111
     12import toolchain.pabloS.semanticAnalyzer.SymbolTable;
    1213
    1314
    14 public class ProgramNode extends ASTNode  {
     15public class ProgramNode extends ASTNode implements HasSymbolTableNodeType {
     16        private SymbolTable symbolTable = null;
    1517
    1618
     
    2022        public ProgramNode(ProgramNode node) {
    2123                super(node);
     24                this.symbolTable = node.symbolTable;
    2225
    2326        }
     
    3841        // attribute accessors
    3942
     43        public SymbolTable getSymbolTable() {
     44                return symbolTable;
     45        }
     46        public void setSymbolTable(SymbolTable _value_) {
     47                symbolTable = _value_;
     48        }
     49       
    4050
    4151       
     
    4959                        result += ", ";
    5060                }
     61                result += "symbolTable = " + symbolTable + ", ";
    5162
    5263                if(result.isEmpty()) return result;
  • proto/pabloj/trunk/src/pabloS/ast/StreamTypeNode.java

    r3166 r3254  
    1212
    1313
    14 public class StreamTypeNode extends ASTNode {
     14public class StreamTypeNode extends ASTNode implements HasFieldWidthNodeType {
    1515        private int fieldWidth = 1;
    1616
  • proto/pabloj/trunk/src/pabloS/ast/StructDeclNode.java

    r3166 r3254  
    1010import java.util.List;
    1111
     12import toolchain.pabloS.semanticAnalyzer.SymbolTable;
    1213
    1314
    14 public class StructDeclNode extends ASTNode  {
     15public class StructDeclNode extends ASTNode implements HasSymbolTableNodeType {
     16        private SymbolTable symbolTable = null;
    1517
    1618
     
    2022        public StructDeclNode(StructDeclNode node) {
    2123                super(node);
     24                this.symbolTable = node.symbolTable;
    2225
    2326        }
     
    3841        // attribute accessors
    3942
     43        public SymbolTable getSymbolTable() {
     44                return symbolTable;
     45        }
     46        public void setSymbolTable(SymbolTable _value_) {
     47                symbolTable = _value_;
     48        }
     49       
    4050
    4151       
     
    4959                        result += ", ";
    5060                }
     61                result += "symbolTable = " + symbolTable + ", ";
    5162
    5263                if(result.isEmpty()) return result;
  • proto/pabloj/trunk/src/pabloS/parser/Parser.java

    r3211 r3254  
    2020import pabloS.lexicalAnalyzer.Lextant;
    2121
     22import toolchain.pabloS.lang.type.StreamType;
     23import toolchain.pabloS.semanticAnalyzer.Binding;
     24import toolchain.pabloS.semanticAnalyzer.SymbolTable;
     25import toolchain.pabloS.lang.type.PrimitiveType;
    2226import toolchain.pabloS.lang.type.Type;
    23 import toolchain.pabloS.lang.type.PrimitiveType;
    24 import toolchain.pabloS.lang.type.StreamType;
    2527
    2628
     
    12191221                {
    12201222                        ASTNode temp_13 = result;
    1221                         StreamTypeNode temp_15 = (StreamTypeNode)temp_13;
     1223                        HasFieldWidthNodeType temp_15 = (HasFieldWidthNodeType)temp_13;
    12221224                        ASTNode temp_16 = allChildren.revGet(0);
    12231225                        IntValuedNodeType temp_18 = (IntValuedNodeType)temp_16;
     
    12291231                        ASTNode temp_21 = (ASTNode)temp_19;
    12301232                        ASTNode temp_22 = result;
    1231                         StreamTypeNode temp_24 = (StreamTypeNode)temp_22;
     1233                        HasFieldWidthNodeType temp_24 = (HasFieldWidthNodeType)temp_22;
    12321234                        int temp_23 = temp_24.getFieldWidth();
    12331235                        temp_21.setType(  StreamType.STREAM(temp_23)  );
  • proto/pabloj/trunk/src/toolchain/pabloS/semanticAnalyzer/SemanticAnalyzer.java

    r3253 r3254  
    11package toolchain.pabloS.semanticAnalyzer;
    22import pabloS.ast.*;
     3import toolchain.pabloS.ast.Accessors;
    34import toolchain.pabloS.lang.type.PrimitiveType;
    45import toolchain.pabloS.lang.type.StreamType;
     
    1819                //
    1920                @Override
     21                public void visitEnter(ProgramNode node) {
     22                        node.setSymbolTable(new SymbolTable());
     23                }
     24                @Override
    2025                public void visitLeave(ProgramNode node) {
    2126                        // TODO Auto-generated method stub     
     
    2631                //
    2732                @Override
     33                public void visitEnter(StructDeclNode node) {
     34                        node.setSymbolTable(new SymbolTable());
     35                }
     36                @Override
     37                public void visitLeave(StructDeclNode node) {
     38                        // TODO Auto-generated method stub     
     39                }               
     40                @Override
    2841                public void visitLeave(StructDeclBodyNode node) {
    29                         // TODO Auto-generated method stub     
    30                 }
    31                 @Override
    32                 public void visitLeave(StructDeclNode node) {
    3342                        // TODO Auto-generated method stub     
    3443                }
     
    4150                // s t r e a m   f u n c t i o n   d e c l a r a t i o n s                                                     
    4251                //
     52                @Override
     53                public void visitEnter(FuncDefNode node) {
     54                        node.setSymbolTable(new SymbolTable());
     55                }
    4356                @Override
    4457                public void visitLeave(FuncDefNode node) {
     
    122135                @Override
    123136                public void visitLeave(IdentifierNode node) {
    124                         // TODO lookup type     
     137                        ASTNode parent = node.getParent();
     138                        if(parent instanceof CompoundIdentifierNode) {
     139                                // let parent handle
     140                        }
     141                        else if(isBeingDefined(node)) {
     142                                // parent creates binding, maybe gives this node a type.
     143                        }
     144                        else {
     145                                String name = Accessors.name(node);
     146                                for(ASTNode ancestor: node.pathToRoot()) {
     147                                        if(ancestor instanceof HasSymbolTableNodeType) {
     148                                                SymbolTable symbolTable = ((HasSymbolTableNodeType) ancestor).getSymbolTable();
     149                                                if(symbolTable.hasBinding(name)) {
     150                                                        node.setBinding(symbolTable.bindingFor(name));
     151                                                }                                                                                                               // I WAS HERE: TS
     152                                        }
     153                                }
     154                        }
     155                }
     156
     157                private boolean isBeingDefined(IdentifierNode node) {
     158                        ASTNode parent = node.getParent();
     159                        return ((parent instanceof FuncDefNode) && node == Accessors.funcIdentifier((FuncDefNode) parent));
    125160                }
    126161
Note: See TracChangeset for help on using the changeset viewer.