private void processTokens(
        String script,
        Stack<StackFrame> stack,
        Map<String,StackFrame> context
    )
    {
        String[] tokens = script.split(TOKEN_SEPARATOR);
        int i;
        boolean processed;
        
        for(i = 0; i < tokens.length; i++)
        {
            processed = false;
            
            // try to run system function on token
            for(SystemFunction func : _systemFunctions)
            {
                if(!processed && Pattern.matches(func.matchString(),tokens[i]))
                {
                    processed = true;
                    func.execute(tokens[i],stack,context);
                }
            }
            
            // run a user function
            if(!processed && _userFunctions.keySet().contains(tokens[i]))
            {
                _userFunctions.get(tokens[i]).execute(stack);
                processed = true;
            }
            
            if(!processed)
            {
                throw new IllegalArgumentException(
                    "ERROR: \"" + tokens[i] + "\" is not a valid keyword, "
                    + "variable name, or defined user function."
                );
            }
        }
    }