Beispiel #1
0
        //in method
        public override void InAMethod(AMethod node)
        {
            //    save current symbol table
            _previousSymbolTables.AddFirst(_currentSymbolTable);

            //    build new param list
            _currentParamList = new List <VariableDefinition>();

            //    build def allowed by types according to grammar
            BasicTypeDefinition intType;

            intType      = new BasicTypeDefinition();
            intType.name = "int";

            BasicTypeDefinition fltType;

            fltType      = new BasicTypeDefinition();
            fltType.name = "float";

            BasicTypeDefinition boolType;

            boolType      = new BasicTypeDefinition();
            boolType.name = "boolean";

            StringTypeDefinition stringType = new StringTypeDefinition();

            stringType.name = "string";

            //    create and seed symbol table
            _currentSymbolTable = new Dictionary <string, Definition>();
            _currentSymbolTable.Add("int", intType);
            _currentSymbolTable.Add("float", fltType);
            _currentSymbolTable.Add("boolean", boolType);
            _currentSymbolTable.Add("string", stringType);
        }
Beispiel #2
0
        //out mehtod
        public override void OutAMethod(AMethod node)
        {
            //    restore previous symbol table
            _currentSymbolTable = _previousSymbolTables.First();
            _previousSymbolTables.RemoveFirst();

            Definition def;
            String     methodName = node.GetId().Text;

            //    ensure submethod isnt used
            if (_currentSymbolTable.TryGetValue(methodName, out def) || _globalSymbolTable.TryGetValue(methodName, out def))
            {
                Console.WriteLine("[" + node.GetOpenparen().Line + "] : " + methodName + " is already declared.");

                //    build function def and add to symbol table
            }
            else
            {
                def      = new MethodDefinition();
                def.name = node.GetId().Text;
                ((MethodDefinition)def).paramList = _currentParamList;

                _currentSymbolTable.Add(methodName, def);
            }
        }
 protected virtual Node_Method parseMethod(AMethod node)
 {
     return new Node_Method(
     parseOne<TIdentifier,Node_Identifier>(parseIdentifier, (TIdentifier)node.GetName()),
     parseOne<PExpression,INode_Expression>(parseExpression, (PExpression)node.GetInterface()),
     getSource(node));
 }