lojix/wam_prolog/src/main/com/thesett/aima/logic/fol/wam/compiler/InstructionCompiler.java
public void endScope() throws SourceCodeException
    {
        // Loop over all predicates in the current scope, found in the symbol table, and consume and compile them.
        for (SymbolKey predicateKey = predicatesInScope.poll(); predicateKey != null;
                predicateKey = predicatesInScope.poll())
        {
            List<Clause> clauseList = (List<Clause>) scopeTable.get(predicateKey, SymbolTableKeys.SYMKEY_PREDICATES);

            // Used to keep track of where within the predicate the current clause is.
            int size = clauseList.size();
            int current = 0;
            boolean multipleClauses = size > 1;

            // Used to build up the compiled predicate in.
            WAMCompiledPredicate result = null;

            for (Iterator<Clause> iterator = clauseList.iterator(); iterator.hasNext(); iterator.remove())
            {
                Clause clause = iterator.next();

                if (result == null)
                {
                    result = new WAMCompiledPredicate(clause.getHead().getName());
                }

                // Compile the single clause, adding it to the parent compiled predicate.
                compileClause(clause, result, current == 0, current >= (size - 1), multipleClauses, current);
                current++;
            }

            // Run the optimizer on the output.
            result = optimizer.apply(result);

            displayCompiledPredicate(result);
            observer.onCompilation(result);

            // Move up the low water mark on the predicates table.
            symbolTable.setLowMark(predicateKey, SymbolTableKeys.SYMKEY_PREDICATES);
        }

        // Clear up the symbol table, and bump the compilation scope up by one.
        symbolTable.clearUpToLowMark(SymbolTableKeys.SYMKEY_PREDICATES);
        scopeTable = null;
        scope++;
    }
public void endScope() throws SourceCodeException
    {
        // Loop over all predicates in the current scope, found in the symbol table, and consume and compile them.
        for (SymbolKey predicateKey = predicatesInScope.poll(); predicateKey != null;
                predicateKey = predicatesInScope.poll())
        {
            List<Clause> clauseList = (List<Clause>) scopeTable.get(predicateKey, SymbolTableKeys.SYMKEY_PREDICATES);

            // Used to keep track of where within the predicate the current clause is.
            int size = clauseList.size();
            int current = 0;
            boolean multipleClauses = size > 1;

            // Used to build up the compiled predicate in.
            WAMCompiledPredicate result = null;

            for (Iterator<Clause> iterator = clauseList.iterator(); iterator.hasNext(); iterator.remove())
            {
                Clause clause = iterator.next();

                if (result == null)
                {
                    result = new WAMCompiledPredicate(clause.getHead().getName());
                }

                // Compile the single clause, adding it to the parent compiled predicate.
                compileClause(clause, result, current == 0, current >= (size - 1), multipleClauses, current);
                current++;
            }

            // Run the optimizer on the output.
            result = optimizer.apply(result);

            displayCompiledPredicate(result);
            observer.onCompilation(result);

            // Move up the low water mark on the predicates table.
            symbolTable.setLowMark(predicateKey, SymbolTableKeys.SYMKEY_PREDICATES);
        }

        // Clear up the symbol table, and bump the compilation scope up by one.
        symbolTable.clearUpToLowMark(SymbolTableKeys.SYMKEY_PREDICATES);
        scopeTable = null;
        scope++;
    }
public void endScope ( ) throws SourceCodeException { // Loop over all predicates in the current scope, found in the symbol table, and consume and compile them. for ( SymbolKey predicateKey = predicatesInScope . poll ( ) ; predicateKey != null ; predicateKey = predicatesInScope . poll ( ) ) { List < Clause > clauseList = ( List < Clause > ) scopeTable . get ( predicateKey , SymbolTableKeys . SYMKEY_PREDICATES ) ; // Used to keep track of where within the predicate the current clause is. int size = clauseList . size ( ) ; int current = 0 ; boolean multipleClauses = size > 1 ; // Used to build up the compiled predicate in. WAMCompiledPredicate result = null ; for ( Iterator < Clause > iterator = clauseList . iterator ( ) ; iterator . hasNext ( ) ; iterator . remove ( ) ) { Clause clause = iterator . next ( ) ; if ( result == null ) { result = new WAMCompiledPredicate ( clause . getHead ( ) . getName ( ) ) ; } // Compile the single clause, adding it to the parent compiled predicate. compileClause ( clause , result , current == 0 , current >= ( size - 1 ) , multipleClauses , current ) ; current ++ ; } // Run the optimizer on the output. result = optimizer . apply ( result ) ; displayCompiledPredicate ( result ) ; observer . onCompilation ( result ) ; // Move up the low water mark on the predicates table. symbolTable . setLowMark ( predicateKey , SymbolTableKeys . SYMKEY_PREDICATES ) ; } // Clear up the symbol table, and bump the compilation scope up by one. symbolTable . clearUpToLowMark ( SymbolTableKeys . SYMKEY_PREDICATES ) ; scopeTable = null ; scope ++ ; }
{@inheritDoc}
{